2009-11-13 2 views
64

En Matplotlib, je fais des lignes pointillées de la grille comme suit:Matplotlib: lignes de la grille de tirage derrière d'autres éléments graphiques

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) de faire la les lignes de quadrillage sont dessinées derrière d'autres éléments de 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?

+7

'ax.set_axisbelow (Vrai)' fonctionne toujours. Aussi agréable pour la sortie pdf ... – BandGap

Répondre

61

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

(J'installe actuellement matplotlib pour la première fois, donc ne sais pas si c'est exact - Je viens de découvrir par googler « Matplotlib grille z de commande » - « z ordre » est généralement utilisé pour décrire ce genre de chose (z étant l'axe « de la page »))

+13

Axis.set_axisbelow (Vrai) – Joeya

+0

Est-il possible d'avoir le quadrillage sous la barre/ligne tout en conservant les étiquettes sur le dessus? J'ai également posté cette question séparément http://stackoverflow.com/questions/29522447/in-matplotlib-is-there-a-way-to-set-gridlines-below-bars-lines-patches-while-re –

+0

Le lien Je ne travaille plus, j'ai peur. – pingul

7

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

[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

Cela fonctionne parce que 'grille' a un' zorder = 2.5'. – farenorth

47

Pour moi, on ne sait pas comment appliquer la réponse de andrew cooke, donc c'est une solution complète basée sur ce point:

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

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

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

ou

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

Il fonctionne pour Matplotlib> = 2,0.

Questions connexes