我在 matplotlib 中使用错误栏遇到了这个有趣的问题。我有两个列表:“迭代”,它是从 0 到 999 的整数值列表;和“平均”,它是 1000 大小的列表,具有真正的负值。
如果我没有指定“yerr”属性,我会得到:
误差条(迭代,平均)
但是,如果我指定了 yerr 属性,但设置为 0,我会得到以下信息:
误差条(迭代,平均,yerr = 0)
在我看来,两张图片应该是一样的,但第二张是由小的水平线组成的,而第一张看起来是连续的。
当我将数组作为 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 条之间绘制线。
非常感谢!