Matplotlib:在其他图形元素后面绘制网格线

And*_*rew 104 python grid matplotlib

在Matplotlib中,我按如下方式制作虚线网格线:

fig = pylab.figure()    
ax = fig.add_subplot(1,1,1)
ax.yaxis.grid(color='gray', linestyle='dashed')
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何(或者甚至可能)使网格线在其他图形元素(如条形图)后面绘制.更改添加网格与添加其他元素的顺序没有区别.

是否有可能使网格线出现在其他所有的后面?

and*_*oke 101

根据这个 - http://old.nabble.com/axis-elements-and-zorder-td6119088.html - 你可以使用Axis.set_axisbelow(True)

(我目前安装matplotlib的第一次,所以不知道如果这是正确的 - 我只是觉得通过谷歌搜索"matplotlib Z顺序电网" - "Z顺序"通常用来形容这种事情(z是轴"在页面外"))

  • Axis.set_axisbelow(真) (15认同)
  • 恐怕该链接不再有效。 (2认同)

Ste*_*fan 73

对我来说,目前还不清楚如何应用andrew cooke的答案,所以这是一个完整的解决方案,基于:

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

  • 截至 2023 年 6 月,这是唯一对我有用的答案。将网格的 zorders 设置为 0 甚至负数,将绘图元素的 zorders 设置为高都不起作用。 (3认同)

Syr*_*jor 25

如果要验证所有数字的设置,可以设置

plt.rc('axes', axisbelow=True)
Run Code Online (Sandbox Code Playgroud)

要么

plt.rcParams['axes.axisbelow'] = True
Run Code Online (Sandbox Code Playgroud)

它适用于Matplotlib> = 2.0.

  • 确保将“plt.grid()”(或修改后的)放在“plt.rc('axes', axisbelow=True)”之后。 (4认同)
  • 最佳答案,因为人们可能希望所有数字都保持一致。 (3认同)

Sau*_*tro 8

我有同样的问题,以下工作:

[line.set_zorder(3) for line in ax.lines]
fig.show() # to update
Run Code Online (Sandbox Code Playgroud)

提高3到一个更高的值,如果它不能正常工作.

  • 这是因为`grid`有一个`zorder = 2.5`. (8认同)

Usm*_*riq 7

您还可以将zorderkwarg 设置为matplotlib.pyplot.grid

plt.grid(which='major', axis='y', zorder=-1.0)
Run Code Online (Sandbox Code Playgroud)

  • @HomeroEsmeraldo,你还必须在所有其他被绘制的东西上设置“zorder”。 (4认同)