Matplotlib: draw grid lines behind other graph elements

Viewed 137963

In Matplotlib, I make dashed grid lines as follows:

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

however, I can't find out how (or even if it is possible) to make the grid lines be drawn behind other graph elements, such as bars. Changing the order of adding the grid versus adding other elements makes no difference.

Is it possible to make it so that the grid lines appear behind everything else?

7 Answers

You can also set the zorder kwarg in matplotlib.pyplot.grid

plt.grid(which='major', axis='y', zorder=-1.0)

You can try to use one of Seaborn's styles. For instance:

import seaborn as sns  
sns.set_style("whitegrid")

Not only the gridlines will get behind but the looks are nicer.

For some (like me) it might be interesting to draw the grid behind only "some" of the other elements. For granular control of the draw order, you can use matplotlib.artist.Artist.set_zorder on the axes directly:

ax.yaxis.grid(color='gray', linestyle='dashed')
ax.set_zorder(3)

This is mentioned in the notes on matplotlib.axes.Axes.grid.

Related