1

我在 matplotlib 中使用错误栏遇到了这个有趣的问题。我有两个列表:“迭代”,它是从 0 到 999 的整数值列表;和“平均”,它是 1000 大小的列表,具有真正的负值。

如果我没有指定“yerr”属性,我会得到:

误差条(迭代,平均)

图像1

但是,如果我指定了 yerr 属性,但设置为 0,我会得到以下信息:

误差条(迭代,平均,yerr = 0)

img2

在我看来,两张图片应该是一样的,但第二张是由小的水平线组成的,而第一张看起来是连续的。

当我将数组作为 yerr 传递时,问题就出现了(大小:1000,所有值都设置为 0,除了一些真正的标准错误值,其中 index%50==0,以免图像过度拥挤)。

误差条(迭代,平均,yerr=stderr)

我想获得一个主线连续的图像(如第一张图像),但我得到的是一个凌乱的图像,如第二张图像。我已经尝试了很多东西,比如修改线型参数,但我仍然不断得到类似第一张图片的东西(每 50 步间隔都有错误栏)

难道我做错了什么?有没有可能做我想做的事。

更新 1

正如大卫在评论中所说,出现水平线是因为标准错误的默认形状是 0。我认为值 0 表示没有错误栏。所以我只需要避免在我将其设置为 0 的地方绘制误差线(误差线仅在 50、100、150、200、250...1000 中)。

更新 2(并已解决)

在这里添加大卫提出的解决方案:

# plot all points without error bars
plot(iterations, average)
# plot errorbars for every 50th point
errorbar(iterations[::50], average[::50], yerr=stderr[::50], linestyle='None')

我刚刚添加了 linestyle='None' 以避免在每个 yerr 条之间绘制线。

非常感谢!

4

1 回答 1

0

好吧,你要求错误栏,你得到了它们。相反,如果您未yerr在参数列表中指定,则错误栏的文档指出“如果 yerr 不是无,则绘制垂直错误栏”。

我不明白 usingerrorbar和 setting背后的目的yerr=0,但yerr=0错误栏显示为小的水平线,因为垂直延伸为零的错误栏的样式。

如果您想指示许多数据点的错误,最好使用阴影背景来指示错误区域。这可以通过fill_between函数来​​实现

编辑:使用评论中的精致问题,绘图代码可以是

# plot all points without error bars
plot(iterations, average)
# plot errorbars for every 50th point
errorbar(iterations[::50], average[::50], yerr=error[::50])
于 2013-03-22T13:48:02.250 回答