如何在Python中创建具有不同线型的主要和次要网格线


122

我目前正在使用matplotlib.pyplot图形来创建图形,并且希望使主要的网格线为实线和黑色,而次要的网格线为灰色或虚线。

在网格属性中,which=both/major/mine然后通过线型简单定义颜色和线型。有没有办法只指定次要线型?

我到目前为止合适的代码是

plt.plot(current, counts, 'rd', markersize=8)
plt.yscale('log')
plt.grid(b=True, which='both', color='0.65', linestyle='-')

Answers:


174

实际上,它和设置一样简单,major并且minor分别是:

In [9]: plot([23, 456, 676, 89, 906, 34, 2345])
Out[9]: [<matplotlib.lines.Line2D at 0x6112f90>]

In [10]: yscale('log')

In [11]: grid(b=True, which='major', color='b', linestyle='-')

In [12]: grid(b=True, which='minor', color='r', linestyle='--')

带有较小网格的陷阱是,您还必须打开较小的刻度线。在上面的代码中,这是通过完成的yscale('log'),但也可以通过完成plt.minorticks_on()

在此处输入图片说明


31
有时,您还需要调用plt.minorticks_on()次网格以实际显示。参见stackoverflow.com/a/19940830/209246
eqzx

2
文档中:“如果提供了kwargs,则假定您想要一个网格,因此b设置为True。” -所以您可能会忽略b=True
miku

我尝试用双对数图做同样的事情。不幸的是,x轴仅显示主要厚度。是否可以打开次要厚度。
亚历山大·卡斯卡

1
@亚历山大您需要axis="both"plt.grid()函数中添加参数。
Kanmani

是否有rcParam属性使它成为默认样式?
Kanmani

21

一种简单的DIY方法是自己制作网格:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,2,3], [2,3,4], 'ro')

for xmaj in ax.xaxis.get_majorticklocs():
  ax.axvline(x=xmaj, ls='-')
for xmin in ax.xaxis.get_minorticklocs():
  ax.axvline(x=xmin, ls='--')

for ymaj in ax.yaxis.get_majorticklocs():
  ax.axhline(y=ymaj, ls='-')
for ymin in ax.yaxis.get_minorticklocs():
  ax.axhline(y=ymin, ls='--')
plt.show()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.