35

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

替代文字

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

替代文字

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

4

2 回答 2

55

基本上,您只需which="both"在 grid 命令中输入参数,使其变为:

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 文档的更多详细信息

于 2010-08-28T16:35:06.333 回答
8

正如@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')
于 2011-03-08T15:14:34.087 回答