【发布时间】:2010-08-28 13:30:02
【问题描述】:
我正在尝试绘制一个对数对数图,该图在图的底部和左侧看到的所有刻度处显示对数间隔的网格线。我已经能够使用matplotlib.pyplot.grid(True) 显示一些 网格线,但这只是以10 次间隔为我显示网格线。举个例子,这是我目前得到的:
我真的很喜欢网格线看起来更像这样的东西,其中网格线不是均匀分布的:
我将如何在 Matplotlib 中实现这一目标?
【问题讨论】:
标签: grid matplotlib
我正在尝试绘制一个对数对数图,该图在图的底部和左侧看到的所有刻度处显示对数间隔的网格线。我已经能够使用matplotlib.pyplot.grid(True) 显示一些 网格线,但这只是以10 次间隔为我显示网格线。举个例子,这是我目前得到的:
我真的很喜欢网格线看起来更像这样的东西,其中网格线不是均匀分布的:
我将如何在 Matplotlib 中实现这一目标?
【问题讨论】:
标签: grid matplotlib
基本上只需要在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
【讨论】:
正如@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 设置为我的实际(直方图)图,否则网格线会穿过我的条形图。
which='both'