web-dev-qa-db-fra.com

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

Dans Matplotlib, je fais 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 si cela est possible) pour dessiner les lignes de la grille derrière d'autres éléments du graphique, tels que les 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?

96
Andrew

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

(J'installe actuellement matplotlib pour la première fois, donc je n'ai aucune idée si c'est correct - je l'ai trouvé en recherchant "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"))

91
andrew cooke

Pour moi, il n'était pas clair 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')
64
Stefan

Si vous souhaitez valider le paramètre pour tous chiffres, vous pouvez définir

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

ou

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

Cela fonctionne pour Matplotlib> = 2.0.

22
Syrtis Major

J'ai eu le même problème et les éléments suivants ont fonctionné:

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

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

8