如何在matplotlib条形图后面绘制网格线

use*_*123 40 matplotlib

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()
Run Code Online (Sandbox Code Playgroud)

我想在条形图后面绘制网格线(x和y).

Gre*_*reg 61

要添加网格,您只需添加即可

ax.grid()

如果您希望网格位于条形后面,则添加

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

重要的是zorder条形的大于网格.试验它似乎zorder=3是实际产生预期效果的最低值.我不知道为什么zorder=1不够.

编辑:我注意到这个问题已经在这里使用不同的方法回答,虽然它遭受了一些链接腐烂.就我所见,这两种方法产生相同的结果,但是andrew cooke的答案更优雅.

  • 虽然不是这个问题的一部分,但值得注意的是,如果通过`yerr`或`xerr`指定了错误条(填充的条将使它们模糊不清),这个解决方案将不起作用; 使用`ax.set_axisbelow()`确实适用于这种情况. (6认同)
  • 如上所述,这不适用于误差线。为了完整起见,命令`ax.set_axisbelow()`需要一个真实的语句,如`ax.set_axisbelow(True)`。 (3认同)

Fed*_*ico 26

我建议另一种解决方案,因为投票最多的答案对我不起作用。您可以使用以下代码来设置绘图后面的网格线。

ax.set_axisbelow(True)
ax.grid(color='gray', linestyle='dashed')
Run Code Online (Sandbox Code Playgroud)

我从这个答案中得到了这个代码。