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

Pet*_*ton 111 python matplotlib

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

在网格属性中,which=both/major/mine然后颜色和线条样式仅由linestyle定义.有没有办法只指定次要线型?

我到目前为止的相应代码是

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

joa*_*uin 162

实际上,它就像设置majorminor分开一样简单:

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='--')
Run Code Online (Sandbox Code Playgroud)

带有小网格的问题是你必须打开小标记.在上面的代码中,这是通过yscale('log'),但它也可以完成plt.minorticks_on().

在此输入图像描述

  • 有时你还需要调用`plt.minorticks_on()`来实现小网格.请参见http://stackoverflow.com/a/19940830/209246 (25认同)
  • 来自[docs](https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.grid.html):"如果提供kwargs,则假设您需要网格,因此b设置为True ". - 所以你可以省略`b = True`. (2认同)
  • 是否有 rcParam 属性使其成为默认样式? (2认同)

ev-*_*-br 20

一个简单的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()
Run Code Online (Sandbox Code Playgroud)