为熊猫图栏设置不同的错误

时间:2019-07-04 18:59:03

标签: python pandas matplotlib

我正在尝试使用pandas.Series绘制概率分布,并且正在努力为每个小节设置不同的yerr。总而言之,我正在绘制以下分布:

https://example.com/api/v1/

它来自Series,并且工作正常,除了yerr之外。它不能超过1或0。因此,我想为每个小节设置不同的错误。因此,我去了enter image description herehere的文档。

根据他们的说法,我有3个选项可以使用yerrxerr

  • 标量:所有数据点的对称+/-值。
  • 标量:所有数据点的对称+/-值。
  • shape(2,N):每个条形的-和+值分开。第一行包含较低的错误,第二行包含较高的错误。

我需要的情况是最后一个。在这种情况下,我可以使用DataFrameSeriesarray-likedictstr。因此,我为每个yerr条设置了数组,但是它没有按预期工作。为了复制正在发生的事情,我准备了以下示例:

首先,我设置一个pandas.Series

import pandas as pd
se = pd.Series(data=[0.1,0.2,0.3,0.4,0.4,0.5,0.2,0.1,0.1],
 index=list('abcdefghi'))

然后,我要复制每种情况:

这按预期工作:

err1 = [0.2]*9
se.plot(kind="bar", width=1.0, yerr=err1)

here

这按预期工作:

err2 = err1
err2[3] = 0.5
se.plot(kind="bar", width=1.0, yerr=err1)

enter image description here

现在出现问题::此操作不符合预期!

err_up = [0.3]*9
err_low = [0.1]*9
err3 = [err_low, err_up]
se.plot(kind="bar", width=1.0, yerr=err3)

enter image description here

没有为上下设置不同的错误。我找到了一个示例enter image description here和一个类似的SO问题here,尽管他们使用的是matplotlib而不是pandas,但它应该在这里起作用。

很高兴您对此有任何解决方案。 谢谢。

2 个答案:

答案 0 :(得分:2)

奇怪的是,plt.bar正常工作:

err_up = [0.3]*9
err_low = [0.1]*9
err3 = [err_low, err_up]
fig, ax = plt.subplots()
ax.bar(se.index, se, width=1.0, yerr=err3)
plt.show()

输出:

enter image description here

也许是熊猫的错误​​/特征/设计决定?

答案 1 :(得分:1)

基于@Quanghoang的评论,我开始认为这是一个错误。因此,我尝试更改yerr的形状,令人惊讶的是,以下代码起作用了:

err_up = [0.3]*9
err_low = [0.1]*9
err3 = [[err_low, err_up]]
print (err3)
se.plot(kind="bar", width=1.0, yerr=err3)

enter image description here

观察,我在err3中加入了一个新轴。现在,它是一个(1,2,N)数组。但是,文档说应该是 (2,N)

此外,我发现可能的解决方法是设置ax.ylim(0,1)。它不能解决问题,但可以正确绘制图形。