具有多个y轴的误差线图会产生ValueError

时间:2015-05-07 00:21:18

标签: python matplotlib

我尝试使用多个y轴创建一个错误栏图,使用here的多个轴作为模板。如果我只改变模板的这一行:

p1, = host.plot([0, 1, 2], [0, 1, 2], "b-", label="Density")

到此:

p1, = host.errorbar([0, 1, 2], [0, 1, 2], yerr=[0.5, 0.5, 0.5], fmt='b-', label="Density")

我得到了输出:

  1. 显示带有多个y轴但仅显示p1数据的错误栏图。
  2. A' ValueError:解压缩的值太多了。
  3. 有人可以帮忙解释为什么会这样吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

errorbarplot会返回不同的内容。 plot返回一个行列表,但在这种情况下,代码假设只返回一行,因此p1,等等将其从列表中取出。

errorbar返回一个Container对象,容器包含多行。您无法使用p1,errorbar返回。相反,您需要以不同的方式处理它。

p1稍后在代码中用于两个不同的目的:设置颜色和设置标签。事实证明,get_label是Container的一种方法。 get_color不是,但它是容器子项的方法,应该是相同的颜色。因此,将代码更改为仅将容器分配给p1,并使用其中一个子容器的颜色。例如:

p1 = host.errorbar([0, 1, 2], [0, 1, 2], yerr=[0.5, 0.5, 0.5], 
                   fmt='b-', label="Density")

然后:

host.yaxis.label.set_color(p1.get_children()[0].get_color())

host.tick_params(axis='y', colors=p1.get_children()[0].get_color(), **tkw)

图例设置代码根本不需要更改。