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

dans Matplotlib, je fais des lignes pointillées de grille 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 c'est possible) faire les lignes de grille être dessinées derrière d'autres éléments de graphe, 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 grille apparaissent derrière tout le reste?

79
demandé sur Saullo G. P. Castro 2009-11-13 03:30:55

4 réponses

selon ce - http://old.nabble.com/axis-elements-and-zorder-td6119088.html - vous pouvez utiliser Axis.set_axisbelow(True)

(je suis en train d'installer matplotlib pour la première fois, donc 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"))

75
répondu andrew cooke 2017-12-15 15:11:52

pour moi, il n'était pas clair comment appliquer la réponse d'andrew cooke, donc c'est une solution complète basée sur cela:

ax.set_axisbelow(True)
ax.yaxis.grid(color='gray', linestyle='dashed')
56
répondu Stefan 2016-08-19 12:51:06

si vous voulez valider le paramètre pour tous figures, vous pouvez définir

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

ou

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

cela fonctionne pour Matplotlib>=2.0.

12
répondu Syrtis Major 2017-03-22 12:39:21

j'ai eu le même problème et la suivante a 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.

7
répondu Saullo G. P. Castro 2013-03-25 10:09:25