【问题标题】:How do I show logarithmically spaced grid lines at all ticks on a log-log plot using Matplotlib?如何使用 Matplotlib 在对数图上的所有刻度上显示对数间隔的网格线?
【发布时间】:2010-08-28 13:30:02
【问题描述】:

我正在尝试绘制一个对数对数图,该图在图的底部和左侧看到的所有刻度处显示对数间隔的网格线。我已经能够使用matplotlib.pyplot.grid(True) 显示一些 网格线,但这只是以10 次间隔为我显示网格线。举个例子,这是我目前得到的:

我真的很喜欢网格线看起来更像这样的东西,其中网格线不是均匀分布的:

我将如何在 Matplotlib 中实现这一目标?

【问题讨论】:

    标签: grid matplotlib


    【解决方案1】:

    基本上只需要在grid命令中放入参数which="both",这样就变成了:

    matplotlib.pyplot.grid(True, which="both")
    

    其他选项是“次要”和“主要”,它们是主要刻度(显示在您的图表中)和您缺少的次要刻度。如果你想要实线,那么你也可以使用ls="-" 作为grid() 的参数。

    这是一个踢球的例子:

    import numpy as np
    from matplotlib import pyplot as plt
    
    x = np.arange(0, 100, .5)
    y = 2 * x**3
    
    plt.loglog(x, y)
    plt.grid(True, which="both", ls="-")
    plt.show()
    

    生成:

    更多详情请关注Matplotlib Docs

    【讨论】:

    • 我发现在我的机器上使用“both”不会显示主要或次要网格线。通过一些谷歌搜索,我发现了这篇文章:mailinglistarchive.com/html/… 这似乎表明旧版本的 matplotlib 需要使用“majorminor”而不是“both”。您是否知道版本之间是否有任何官方文档说明此更改?我看过matplotlib.sourceforge.net/api/api_changes.html,但似乎没有任何提及...
    • @Bryce 我不知道该更改何时生效。我一般只使用最新版本。我实际上对 matplotlib 并不是那么精通。
    • 看到其中一条消息让我觉得它发生在 2010 年 6 月 9 日。我不确定那会是什么版本,但它是最近的。
    • 较小的网格线使人物看起来非常拥挤。或者,您可以尝试增加您在 matplotlibrc 文件中的主要-次要 x/y 刻度大小。
    • @Gokan 我在某种程度上同意,但我发现如果你使用虚线而不是实线,网格的侵入性会更小。
    【解决方案2】:

    正如@Bryce 所说,在旧版本的 matplotlib 中,正确的 kwarg 是 which=majorminor。我认为颜色较浅的实线比虚线更好。

    plt.grid(True, which="majorminor", ls="-", color='0.65')
    

    请注意,在最新版本的 matplotlib 中,此参数已替换为 'both'。

    plt.grid(True, which="both", ls="-", color='0.65')
    

    【讨论】:

    • 我需要将zorder=3 设置为我的实际(直方图)图,否则网格线会穿过我的条形图。
    • Matblotlib 版本 3.1.2 参数必须是 which='both'
    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 2023-03-24
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多