【问题标题】:Setting different errors for pandas plot bar为 pandas 绘图栏设置不同的错误
【发布时间】:2019-11-15 12:04:33
【问题描述】:

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

它来自Series,它工作正常,除了yerr。它不能超过 1 或 0。所以,我想为每个条设置不同的错误。因此,我查看了文档,该文档可在 herehere 找到。

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

  • 标量:所有数据点的对称 +/- 值。
  • 标量:所有数据点的对称 +/- 值。
  • 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)

这按预期工作:

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

现在的问题是:这没有按预期工作!

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

它没有为低和高设置不同的错误。我找到了一个示例 here 和一个类似的 SO 问题 here,虽然他们使用的是 matplotlib 而不是 pandas,但它应该在这里工作。

如果您对此有任何解决方案,我很高兴。 谢谢。

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案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)
    

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

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

    【讨论】:

      【解决方案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()
      

      输出:

      可能是熊猫的错误​​/功能/设计决策?

      【讨论】:

      • 感谢您的回答。所以,我喜欢的例子工作得很好,就像你的一样。所以,我开始认为这是一个错误,因为文档说这是我们应该使用的方式。
      • 我找到了一个解决方案,它看起来像一个错误。你能检查我的答案吗?谢谢!
      猜你喜欢
      • 2020-12-25
      • 2017-04-09
      • 2015-11-24
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      相关资源
      最近更新 更多