Як створити основні та другорядні лінії з різними стилями в 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()функції.
Канмані

Чи є властивість rcParam зробити це як стиль за замовчуванням?
Канмані

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()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.