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

vxbzzdmp  于 2023-08-06  发布在  其他
关注(0)|答案(9)|浏览(132)

在Matplotlib中,我做了如下虚线网格:

fig = pylab.figure()    
ax = fig.add_subplot(1,1,1)
ax.yaxis.grid(color='gray', linestyle='dashed')

字符串
但是,我不知道如何(或者是否可能)将网格线绘制在其他图形元素(如条形图)的后面。更改添加网格的顺序与添加其他元素的顺序没有区别。
有没有可能使网格线出现在其他所有东西的后面?

sd2nnvve

sd2nnvve1#

根据这个-http://matplotlib.1069221.n5.nabble.com/axis-elements-and-zorder-td5346.html-你可以使用Axis.set_axisbelow(True)
(我目前是第一次安装matplotlib,所以不知道这是否正确-我只是通过谷歌搜索“matplotlib z order grid”找到它-“z order”通常用于描述这种事情(z是“页面外”的轴))

9o685dep

9o685dep2#

对我来说,还不清楚如何应用安德鲁·库克的答案,所以这是一个基于此的完整解决方案:

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

字符串

8hhllhi2

8hhllhi23#

如果要验证所有图形的设置,可以设置

plt.rc('axes', axisbelow=True)

字符串
或者是

plt.rcParams['axes.axisbelow'] = True


它适用于Matplotlib>=2.0。

wlsrxk51

wlsrxk514#

我遇到了同样的问题,以下方法起作用:

[line.set_zorder(3) for line in ax.lines]
fig.show() # to update

字符串
如果3不起作用,请将其增加到更高的值。

ntjbwcob

ntjbwcob5#

也可以在matplotlib.pyplot.grid中设置zorder kwarg

plt.grid(which='major', axis='y', zorder=-1.0)

字符串

yshpjwxd

yshpjwxd6#

您可以尝试使用Seaborn的样式之一。例如:

import seaborn as sns  
sns.set_style("whitegrid")

字符串
不仅网格线会落后,但看起来更好。

htzpubme

htzpubme7#

对于一些人(比如我)来说,只在其他元素的“一些”后面绘制网格可能会很有趣。对于绘制顺序的精细控制,可以直接在坐标轴上使用matplotlib.artist.Artist.set_zorder:

ax.yaxis.grid(color='gray', linestyle='dashed')
ax.set_zorder(3)

字符串
这在matplotlib.axes.Axes.grid的注解中提到。

tvz2xvvm

tvz2xvvm8#

只需确保点的zorder值高于网格线,例如:

plt.scatter(x,y,c="k",marker="x",zorder=2)

字符串
后面跟着

plt.grid(linestyle="--",alpha=0.5,zorder=1)

pnwntuvh

pnwntuvh9#

这些答案对我不起作用(zorderaxisbelowset_zorder):

fig, ax = plt.subplots(3, 1, dpi=200)
ax[0].yaxis.grid(True, which='major', linestyle='--')
ax[0].boxplot(data, positions=[0, 0.5], widths=[0.5, 0.5])

字符串
相反,使用patch_artist更改图形元素的背景颜色对我来说很有效:

l = ax[0].boxplot(data, positions=[0, 0.5], widths=[0.5, 0.5],
  patch_artist=True)
for bplot in (l,):
  for patch, color in zip(bplot['boxes'], ['white', 'white']):
    patch.set_facecolor(color)
``

相关问题