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

我遇到了图例和错误栏绘图命令的相当奇怪的行为。我正在将Python xy 2.7.3.1与matplotlib 1.1.1 以下代码一起使用,以例证所观察到的行为:


import pylab as P

import numpy as N


x1=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 dots

P.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()

这产生了这个情节:

http://img2.mukewang.com/605ed83f0001bc4b05730428.jpg

如您所见,错误栏上限正在覆盖散点图。如果我增加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),...如正确地你的建议,仍然得到同样的情节,误差线帽仍然是分散的点上方。我相应地更正了上面的示例。


守候你守候我
浏览 324回答 2
2回答

饮歌长啸

根据您发布的代码,创建的图是正确的。最低 的对象zorder放在底部,而最高 的对象zorder放在顶部。您链接到的zorder问题已在matplotlib版本1.2.1中修复,因此,如果可能,应更新安装。在您的第一个子图中,误差线绘制在散点上方,因为使用errorbar会调用zorder=2,而scatter使用zorder=1-会调用,这意味着误差线将覆盖散点。在你的第二个插曲,你叫errorbar用zorder=99,scatter用zorder=100而plot用zorder=101-这意味着errorbars将被放置在散点和线下两种。之所以legend在第一个子图中的行顶部显示它,而在第二个子图中的同一行顶部显示它,是因为您没有显式设置图例objectazorder值,这意味着它将使用它的默认值(我相信是5)。要更改图例的zorder,只需使用P.legend(loc="center").set_zorder(102)其中102是所需的zorder值。因此,为了产生所需的输出,必须相应地设置zorder参数。由于您尚未在问题中描述所需的输出,因此我很难“更正”您的代码,因为我不知道您希望按什么顺序绘制对象。

慕盖茨4494581

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

相关分类

Python