2009-11-13 4 views
64

In Matplotlib, faccio linee tratteggiate griglia come segue:Matplotlib: tiraggio griglia dietro altri elementi grafici

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

tuttavia, non riesco a scoprire come (o anche se è possibile) per rendere il le linee della griglia devono essere tracciate dietro altri elementi del grafico, come barre. Cambiare l'ordine di aggiungere la griglia e aggiungere altri elementi non fa differenza.

È possibile fare in modo che le linee della griglia compaiano dietro tutto il resto?

+7

'ax.set_axisbelow (True)' funziona ancora. Ottimo anche per l'output pdf ... – BandGap

risposta

61

Secondo questo - http://old.nabble.com/axis-elements-and-zorder-td6119088.html - è possibile utilizzare Axis.set_axisbelow(True)

(attualmente sto installando matplotlib per la prima volta, quindi non ho idea se questo è corretto - Ho appena trovato da googling "matplotlib griglia ordine z" - "z ordine" viene in genere utilizzato per descrivere questo genere di cose (z essendo l'asse "fuori della pagina"))

+13

Axis.set_axisbelow (True) – Joeya

+0

È possibile avere le linee della griglia sotto la barra/linea mantenendo le etichette in cima? Ho anche postato questo quesiton separatamente http://stackoverflow.com/questions/29522447/in-matplotlib-is-there-a--to-set-gridlines-below-bars-lines-patches-while-re –

+0

Il link non funziona più ho paura. – pingul

7

ho avuto lo stesso problema e la segue ha funzionato:

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

Aumento 3 a un valore più alto se non funziona.

+7

Funziona perché 'grid' ha un' zorder = 2.5'. – farenorth

47

Per me, non era chiaro come applicare la risposta di Andrew Cooke, quindi questa è una soluzione completa basata su che:

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

Se si desidera convalidare l'impostazione per tutti figure, è possibile impostare

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

o

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

funziona per Matplotlib> = 2.0.