为了账号安全,请及时绑定邮箱和手机立即绑定

带有图例和错误栏的奇怪matplotlib zorder行为

带有图例和错误栏的奇怪matplotlib zorder行为

守候你守候我 2021-03-17 17:10:50
我遇到了图例和错误栏绘图命令的相当奇怪的行为。我正在将Python xy 2.7.3.1与matplotlib 1.1.1 以下代码一起使用,以例证所观察到的行为:import pylab as Pimport numpy as Nx1=N.linspace(0,6,10)y1=N.sin(x1)x2=N.linspace(0,6,5000)y2=N.sin(x2)xerr = N.repeat(0.01,10)yerr = N.repeat(0.01,10)#error bar caps visible in scatter dotsP.figure()P.subplot(121)P.title("strange error bar caps")P.scatter(x1,y1,s=100,c="k",zorder=1)P.errorbar(x1,y1,yerr=yerr,xerr=xerr,color="0.7",     ecolor="0.7",fmt=None, zorder=0)P.plot(x2,y2,label="a label")P.legend(loc="center")P.subplot(122)P.title("strange legend behaviour")P.scatter(x1,y1,s=100,c="k",zorder=100)P.errorbar(x1,y1,yerr=yerr,xerr=xerr,color="0.7",     ecolor="0.7",fmt=None, zorder=99)P.plot(x2,y2,label="a label", zorder=101)P.legend(loc="center")P.show()这产生了这个情节:如您所见,错误栏上限正在覆盖散点图。如果我增加zorder足够多,这种情况将不再发生,但情节线将覆盖图例。我怀疑该问题与matplotlib的zorder问题有关。快速,肮脏,hacky解决方案也受到赞赏。编辑(感谢@nordev):期望的结果如下:误差线和末端盖应在散点图点以下。线图应在散点图和误差线上方传说应高于一切根据您的答案调整zorder:P.legend(zorder=100) -> self.legend_ = mlegend.Legend(self, handles, labels, **kwargs) TypeError: __init__() got an unexpected keyword argument 'zorder'P.errorbar(zorder=0),P.scatter(zorder=1),...如正确地你的建议,仍然得到同样的情节,误差线帽仍然是分散的点上方。我相应地更正了上面的示例。
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

根据您发布的代码,创建的图是正确的。最低 的对象zorder放在底部,而最高 的对象zorder放在顶部。您链接到的zorder问题已在matplotlib版本1.2.1中修复,因此,如果可能,应更新安装。

在您的第一个子图中,误差线绘制在散点上方,因为使用errorbar会调用zorder=2,而scatter使用zorder=1-会调用,这意味着误差线将覆盖散点。

在你的第二个插曲,你叫errorbarzorder=99scatterzorder=100plotzorder=101-这意味着errorbars将被放置在散点和线下两种。

之所以legend在第一个子图中的行顶部显示它,而在第二个子图中的同一行顶部显示它,是因为您没有显式设置图例objectazorder值,这意味着它将使用它的默认值(我相信是5)。要更改图例的zorder,只需使用P.legend(loc="center").set_zorder(102)其中102是所需的zorder值。

因此,为了产生所需的输出,必须相应地设置zorder参数。由于您尚未在问题中描述所需的输出,因此我很难“更正”您的代码,因为我不知道您希望按什么顺序绘制对象。


查看完整回答
反对 回复 2021-03-27
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

在我看来,新旧软件的使用总是“利弊”,因此最终我猜这是由用户决定的,更重要的是(例如新功能与已知的错误解决方法等) )。我以前的评论应该更清楚一些;避免已知问题(至少在某种程度上)的最简单方法是使软件保持最新。

查看完整回答
反对 回复 2021-03-27
  • 2 回答
  • 0 关注
  • 322 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号