Matplotlib: dessinez des lignes de quadrillage derrière d'autres éléments du graphique


124

Dans Matplotlib, je crée des lignes de grille en pointillés comme suit:

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

cependant, je ne peux pas savoir comment (ou même s'il est possible) faire en sorte que les lignes de la grille soient dessinées derrière d'autres éléments du graphique, tels que des barres. Changer l'ordre d'ajout de la grille par rapport à l'ajout d'autres éléments ne fait aucune différence.

Est-il possible de faire en sorte que les lignes de la grille apparaissent derrière tout le reste?


10
ax.set_axisbelow(True)fonctionne encore. Aussi bien pour la sortie pdf ...
BandGap

5
Je me serais attendu ax.set_axisbelow(True)à être la valeur par défaut ...
PatrickT

Réponses:


122

Selon ceci - http://matplotlib.1069221.n5.nabble.com/axis-elements-and-zorder-td5346.html - vous pouvez utiliserAxis.set_axisbelow(True)

(J'installe actuellement matplotlib pour la première fois, donc je n'ai aucune idée si c'est correct - je viens de le trouver en googlant "matplotlib z order grid" - "z order" est généralement utilisé pour décrire ce genre de chose (z étant l'axe "hors de la page"))


Est-il possible d'avoir le quadrillage sous la barre / ligne tout en conservant les étiquettes en haut? J'ai également posté cette question séparément stackoverflow.com/questions/29522447/…
joelostblom

Ce pourrait être ce matplotlib.1069221.n5.nabble.com/... , ancien fil de discussion.
Jacques Kvam

86

Pour moi, on ne savait pas comment appliquer la réponse d'Andrew Cooke, c'est donc une solution complète basée sur cela:

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

34

Si vous souhaitez valider le réglage pour tous les chiffres, vous pouvez définir

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

ou

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

Cela fonctionne pour Matplotlib> = 2.0.


8

J'ai eu le même problème et ce qui suit a fonctionné:

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

Augmentez 3à une valeur plus élevée si cela ne fonctionne pas.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.