Matplotlib: dibuja líneas de cuadrícula detrás de otros elementos del gráfico

124

En Matplotlib, hago líneas de cuadrícula discontinuas de la siguiente manera:

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

sin embargo, no puedo averiguar cómo (o incluso si es posible) hacer que las líneas de la cuadrícula se dibujen detrás de otros elementos del gráfico, como barras. Cambiar el orden de agregar la cuadrícula versus agregar otros elementos no hace ninguna diferencia.

¿Es posible hacer que las líneas de la cuadrícula aparezcan detrás de todo lo demás?

Andrés
fuente
10
ax.set_axisbelow(True)todavía funciona. También es bueno para la salida en pdf ...
BandGap
5
Hubiera esperado ax.set_axisbelow(True)ser el predeterminado ...
PatrickT

Respuestas:

122

De acuerdo con esto, http://matplotlib.1069221.n5.nabble.com/axis-elements-and-zorder-td5346.html , puede usarAxis.set_axisbelow(True)

(Actualmente estoy instalando matplotlib por primera vez, así que no tengo idea de si eso es correcto - lo encontré buscando en Google "matplotlib z order grid" - "z order" se usa típicamente para describir este tipo de cosas (siendo z el eje "fuera de la página"))

Andrew Cooke
fuente
¿Es posible tener las líneas de cuadrícula debajo de la barra / línea mientras se mantienen las etiquetas en la parte superior? También publiqué esta pregunta por separado stackoverflow.com/questions/29522447/…
joelostblom
Podría ser este matplotlib.1069221.n5.nabble.com/… , aunque es un hilo antiguo.
Jacques Kvam
86

Para mí, no estaba claro cómo aplicar la respuesta de Andrew Cooke, por lo que esta es una solución completa basada en eso:

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

Si desea validar la configuración para todas las cifras, puede configurar

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

o

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

Funciona para Matplotlib> = 2.0.

Syrtis Major
fuente
8

Tuve el mismo problema y funcionó lo siguiente:

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

Aumente 3a un valor más alto si no funciona.

Saullo GP Castro
fuente