gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:09 27 4
gpt4 key购买 nike

我遇到了一个相当奇怪的图例行为和错误栏绘图命令。我正在使用 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()

产生这个图:

error bar caps above scatter plot, plot line above legend

如您所见,误差线上限覆盖了散点图。如果我足够多地增加 zorder 这不会再发生,但情节线会覆盖图例。我怀疑问题与this zorder problem有关使用 matplotlib。

快速、肮脏、hacky 的解决方案也很受欢迎。

编辑(感谢@nordev):期望的结果如下:

  • 误差线以及结束上限应低于散点图点。
  • 线图应位于散点图和误差线上方
  • 传说高于一切

根据你的答案调整zorder:

  • P.legend(zorder=100) --> self.legend_ = mlegend.Legend(self, handles, labels, **kwargs) 复制代码
    TypeError: __init__() 得到了一个意外的关键字参数 'zorder'
  • P.errorbar(zorder=0), P.scatter(zorder=1), ...正如您正确建议的那样,仍然会产生相同的图,错误栏上限仍在散点上方。我相应地更正了上面的示例。

最佳答案

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

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

在你的第二个子图中,你用 zorder=99 调用了 errorbar,用 zorder=100 调用了 scatterplotzorder=101 - 这意味着误差线将被放置在散点和线的下方。

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

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

关于python - 带有图例和错误栏的奇怪 matplotlib zorder 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16770049/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com