matplotlib 错误条连续线图
我遇到了一个有趣的问题,涉及到使用matplotlib绘制误差条。我有两个列表:
一个是“iterations”,它是一个从0到999的整数列表;另一个是“average”,它是一个大小为1000的列表,里面全是负数。
如果我不指定“yerr”这个属性,我得到的是:
errorbar(iterations,average)
但是,如果我指定了yerr属性,并且设置为0,我得到的是:
errorbar(iterations,average,yerr=0)
我觉得这两张图应该是一样的,但第二张图是由小的水平线组成,而第一张图看起来是连续的。
问题出现在我传递一个数组作为yerr(大小为1000,所有值都设置为0,除了在某些真实的标准误差值的地方,索引%50==0,以免图像过于拥挤)。
errorbar(iterations,average,yerr=stderr)
我希望得到一张主线是连续的图(像第一张),但结果却是一张杂乱的图,像第二张。我尝试了很多方法,比如修改线条样式的参数,但我仍然得到类似于第一张的效果(每隔50步就有误差条)。
我是不是做错了什么?我想要的效果可能实现吗?
更新 1
正如David在评论中所说,水平线出现是因为标准误差为0的默认形状。我原以为0的值表示没有误差条。所以我只需要避免在我设置为0的地方绘制误差条(误差条只在50、100、150、200、250... 1000的位置)。
更新 2(已解决)
在这里添加David提出的解决方案:
# 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条之间绘制线。
非常感谢!
1 个回答
好吧,你想要误差条,结果也得到了。相反,如果你在参数列表中不指定 yerr
,那么误差条的文档上说“如果 yerr 不是 None,就会绘制垂直误差条”。
我不太明白为什么要使用 errorbar
并且把 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])