如何在matplotlib柱状图后绘制网格线

87 投票
5 回答
119664 浏览
提问于 2025-04-18 04:42
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()

我想在柱状图的后面画上网格线(横轴和纵轴的线)。

5 个回答

-4

ax.grid(zorder=0) 这样写是可以的。但是要先放置柱状图,然后再放置网格,而不是反过来。

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

我收集了一些货币之间的相关性数据,并按照年份进行了排序,形成了我的数据框 df,下面是运行代码后的结果。

我收集了一些货币之间的相关性数据,并按照年份进行了排序,形成了我的数据框 df

0

使用 .grid() 这个方法可以把顺序设置为0,也就是回到最开始的状态。

ax.grid(zorder=0)
3
plt.grid(True, color = "grey", linewidth = "1.4", linestyle = "-.")

这个方法对我有效,网格线会显示为灰色边框,如果你想的话,可以把边框的样式改成 linestyle = "..",就像这样。

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

总结一下整个代码块:

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

我想提供一个不同的解决方案,因为最受欢迎的回答对我没有用。你可以使用下面的代码来把网格线放在图表的后面。

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

这段代码是我从 这个回答 中找到的。

135

要添加网格,只需要加上

ax.grid()

如果你想让网格在柱子后面显示,可以加上

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

这里面很重要的一点是,柱子的 zorder 值要比网格的值大。经过实验,我发现 zorder=3 是能达到想要效果的最低值。我也不知道为什么 zorder=1 不够用。

编辑:我注意到这个问题已经在这里用另一种方法回答过了,不过那个链接有点失效。看起来这两种方法得到的结果是一样的,但 andrew cooke 的回答更优雅。

撰写回答