Matplotlib: Zeichnen Sie Gitterlinien hinter anderen Diagrammelementen

123

In Matplotlib mache ich gestrichelte Gitterlinien wie folgt:

fig = pylab.figure()    
ax = fig.add_subplot(1,1,1)
ax.yaxis.grid(color='gray', linestyle='dashed')

Ich kann jedoch nicht herausfinden, wie (oder ob es möglich ist), die Gitterlinien hinter anderen Diagrammelementen wie Balken zu zeichnen. Das Ändern der Reihenfolge des Hinzufügens des Rasters im Vergleich zum Hinzufügen anderer Elemente macht keinen Unterschied.

Ist es möglich, es so zu gestalten, dass die Gitterlinien hinter allem anderen erscheinen?

Andrew
quelle
10
ax.set_axisbelow(True)funktioniert noch. Auch schön für PDF-Ausgabe ...
BandGap
5
Ich hätte erwartet ax.set_axisbelow(True), die Standardeinstellung zu sein ...
PatrickT

Antworten:

122

Demnach können Sie - http://matplotlib.1069221.n5.nabble.com/axis-elements-and-zorder-td5346.html - verwendenAxis.set_axisbelow(True)

(Ich installiere derzeit Matplotlib zum ersten Mal, habe also keine Ahnung, ob das richtig ist. Ich habe es gerade durch Googeln von "matplotlib z order grid" gefunden. "Z order" wird normalerweise verwendet, um diese Art von Dingen zu beschreiben (z ist die Achse "out of the page"))

Andrew Cooke
quelle
Ist es möglich, die Gitterlinien unter dem Balken / der Linie zu haben, während die Beschriftungen oben bleiben? Ich habe diese Frage auch separat gestapelt stackoverflow.com/questions/29522447/…
joelostblom
Es könnte sich jedoch um diesen matplotlib.1069221.n5.nabble.com/… handeln , einen alten Thread.
Jacques Kvam
85

Für mich war unklar, wie man die Antwort von Andrew Cooke anwendet, daher ist dies eine vollständige Lösung, die darauf basiert:

ax.set_axisbelow(True)
ax.yaxis.grid(color='gray', linestyle='dashed')
Stefan
quelle
34

Wenn Sie die Einstellung für alle Figuren validieren möchten , können Sie sie einstellen

plt.rc('axes', axisbelow=True)

oder

plt.rcParams['axes.axisbelow'] = True

Es funktioniert für Matplotlib> = 2.0.

Syrtis Major
quelle
8

Ich hatte das gleiche Problem und Folgendes funktionierte:

[line.set_zorder(3) for line in ax.lines]
fig.show() # to update

Erhöhen Sie 3auf einen höheren Wert, wenn es nicht funktioniert.

Saullo GP Castro
quelle