Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to draw grid lines behind matplotlib bar graph

x = ['01-02', '02-02', '03-02', '04-02', '05-02'] y = [2, 2, 3, 7, 2]  fig, ax = plt.subplots(1, 1) ax.bar(range(len(y)), y, width=0.3,align='center',color='skyblue') plt.xticks(range(len(y)), x, size='small') plt.savefig('/home/user/graphimages/foo2.png') plt.close() 

I want to draw grid lines (of x & y) behind the bar graph.

like image 684
Adithya Avatar asked Apr 29 '14 07:04

Adithya


People also ask

How do I create a horizontal grid in Matplotlib?

Try setting the grid after plotting the DataFrame. Also, to get the horizontal grid, you need to use ax2. grid(axis='y') .

How do I show a minor grid in Matplotlib?

Matplotlib doesn't show the minor ticks / grid by default so you also need explicitly show them using minorticks_on() .


2 Answers

To add a grid you simply need to add

ax.grid()

If you want the grid to be behind the bars then add

ax.grid(zorder=0) ax.bar(range(len(y)), y, width=0.3, align='center', color='skyblue', zorder=3) 

The important part is that the zorder of the bars is greater than grid. Experimenting it seems zorder=3 is the lowest value that actually gives the desired effect. I have no idea why zorder=1 isn't sufficient.

EDIT: I have noticed this question has already been answered here using a different method although it suffers some link rot. Both methods yield the same result as far as I can see but andrew cooke's answer is more elegant.

like image 156
Greg Avatar answered Sep 29 '22 16:09

Greg


I am suggesting another solution since the most voted answer did not work for me. You can use the following code to set the gridlines behind the plot.

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

I got this code from this answer.

like image 42
Federico Avatar answered Sep 29 '22 17:09

Federico