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

如何在Python中创建具有不同线型的主网格线和次网格线,python,matplotlib,Python,Matplotlib,我目前正在使用matplotlib.pyplot创建图形,希望主网格线为实心和黑色,次网格线为灰色或虚线 在栅格属性中,其中=两者/major/mine,然后颜色和线型仅由线型定义。是否有方法仅指定次要线型 到目前为止,我掌握的适当代码是 plt.plot(current, counts, 'rd', markersize=8) plt.yscale('log') plt.grid(b=True, which='both', color='0.65', linestyle='-') 一个简单的

我目前正在使用
matplotlib.pyplot
创建图形,希望主网格线为实心和黑色,次网格线为灰色或虚线

在栅格属性中,
其中=两者/major/mine
,然后颜色和线型仅由线型定义。是否有方法仅指定次要线型

到目前为止,我掌握的适当代码是

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

一个简单的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()

实际上,只需分别设置
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='--')
[9]中的
:绘图([23456676,89906,342345])
出[9]:[]
[10]中:yscale('log'))
在[11]中:网格(b=True,其中class='major',color='b',linestyle='-')
在[12]中:网格(b=True,其中class='minor',color='r',linestyle='--')
小网格的问题是你也必须打开小记号。在上面的代码中,这是通过
yscale('log')
完成的,但也可以通过
plt.minorticks\u on()
完成


有时您还需要调用
plt.minorticks\u on()
,以实际显示次要网格。请参见“如果提供了kwargs,则假定您需要一个网格,因此b设置为True。”-因此您可能会忽略
b=True
。我已尝试使用双对数绘图进行同样的操作。不幸的是,x轴仅显示主要厚度。是否可以同时打开次要厚度。Alexander,您需要将
axis=“both”
参数添加到
plt.grid()
函数中。是否有rcParam属性将其作为默认样式?