So erstellen Sie in Python Haupt- und Nebengitterlinien mit unterschiedlichen Linienstilen

122

Ich verwende derzeit matplotlib.pyplotzum Erstellen von Diagrammen und möchte, dass die Hauptgitterlinien durchgehend und schwarz und die Nebengitterlinien entweder grau oder gestrichelt sind.

In den which=both/major/mineRastereigenschaften werden dann Farbe und Linienstil einfach durch Linienstil definiert. Gibt es eine Möglichkeit, nur einen kleinen Linienstil anzugeben?

Der entsprechende Code, den ich bisher habe, ist

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

Antworten:

174

Eigentlich ist es so einfach wie das Einstellen majorund minorseparat:

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='--')

Das Problem mit kleinen Gittern ist, dass auch kleine Häkchen aktiviert sein müssen. Im obigen Code wird dies von gemacht yscale('log'), aber es kann auch mit gemacht werden plt.minorticks_on().

Geben Sie hier die Bildbeschreibung ein

Joaquin
quelle
31
Manchmal müssen Sie auch das Nebenraster aufrufen plt.minorticks_on(), damit es tatsächlich angezeigt wird. Siehe stackoverflow.com/a/19940830/209246
eqzx
2
Aus den Dokumenten : "Wenn kwargs geliefert werden, wird angenommen, dass Sie ein Gitter wollen und b daher auf True gesetzt ist." - so könnten Sie weglassen b=True.
Miku
Ich habe versucht, dasselbe mit Double-Log-Plot zu tun. Leider zeigt die x-Achse nur die Hauptdicken. Ist es möglich, auch die kleinen Dicks einzuschalten?
Alexander Cska
1
@Alexander Sie müssen axis="both"der plt.grid()Funktion Parameter hinzufügen .
Kanmani
Gibt es eine rcParam-Eigenschaft, um dies als Standardstil festzulegen?
Kanmani
21

Ein einfacher DIY-Weg wäre, das Gitter selbst zu erstellen:

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()
ev-br
quelle