Как создать основные и второстепенные линии сетки с разными стилями линий в 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='-')
Питер Сакстон
источник

Ответы:

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().

введите описание изображения здесь

Хоакин
источник
33
Иногда вам также необходимо вызвать 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

Простой способ своими руками - сделать сетку самостоятельно:

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()
эв-уш
источник