How to draw grid lines behind matplotlib bar graph

PythonMatplotlib

Python Problem Overview


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.

Python Solutions


Solution 1 - Python

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.

Solution 2 - Python

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.

Solution 3 - Python

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()

Solution 4 - Python

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAdithyaView Question on Stackoverflow
Solution 1 - PythonGregView Answer on Stackoverflow
Solution 2 - PythonFedericoView Answer on Stackoverflow
Solution 3 - PythonDulangi_KanchanaView Answer on Stackoverflow
Solution 4 - Pythonuser2458922View Answer on Stackoverflow