设置b区的不同错误

2024-04-16 13:42:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用pandas.Series来绘制概率分布图,我正在努力为每个条设置不同的yerr。总之,我绘制了以下分布图:

enter image description here

它来自于Series,除了yerr之外,它工作正常。它不能跨越1或0。所以,我想为每个条设置不同的错误。因此,我去了文档,它是herehere。你知道吗

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

  • 标量:所有数据点的对称+/-值。你知道吗
  • 标量:所有数据点的对称+/-值。你知道吗
  • 形状(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)

enter image description 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

它没有为低和高设置不同的错误。我发现了一个例子here和一个类似的SO问题here,尽管他们使用的是matplotlib而不是pandas,但在这里应该是可行的。你知道吗

我很高兴你能解决这个问题。 非常感谢。你知道吗


Tags: 数据pandashereplot错误绘制barwidth
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

熊猫的缺陷/特性/设计决策?你知道吗

基于@Quanghoang的评论,我开始认为这是一个bug。因此,我尝试更改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)。它不能解决问题,但可以正确地绘制图形。你知道吗

相关问题 更多 >