How to draw grid lines behind matplotlib bar graph

Question:

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.

Asked By: Adithya

||

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.

Answered By: Greg

ax.grid(zorder=0) Woud work. But First Place the Bar and then Place the Grid.Not the orther way.

ax = df.plot.bar(x='Index', y='Values', rot=90)
ax.grid(zorder=0)

I took some currency Correlation with Year and Sorted it as my Data Frame df, and below is the result of the code run.
I took some currency Correlation with Year and Sorted it as my Data Frame df

Answered By: user2458922
plt.grid(True, color = "grey", linewidth = "1.4", linestyle = "-.")

This worked for me, the grid lines will be in grey border color,if you want can change border design to linestyle = ".."
Like this

plt.grid(True, color = "grey", linewidth = "1.4", linestyle = "..")

Summing up entire code block:

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.grid(True, color = "grey", linewidth = "1.4", linestyle = "-.")
plt.savefig('/home/user/graphimages/foo2.png')
plt.close()
Answered By: Dulangi_Kanchana

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.

Answered By: Federico

use .grid() it makes the order go to 0 (back)

ax.grid(zorder=0)
Answered By: Pythoneer
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.