我遇到了一个有趣的问题,使用matplotlib的错误条。我有两个列表:"iterations",它是从0到999之间的整数值的列表;和"average",是带有实际负值的1000个大小的列表。
如果我不指定"yerr“属性,则得到:
错误条(迭代,平均)
但是,如果我指定yerr属性,但设置为0,则得到以下内容:
错误条(迭代,平均值,yerr=0)
在我看来,这两幅画都应该是一样的,但是第二幅是由小的水平线组成的,而第一幅似乎是连续的。
当我将数组作为yerr传递(大小:1000,除一些实际的index%50==0错误值之外,所有值都设置为0,以便不超过图像),问题就出现了。
错误条(迭代,平均值,yerr=stderr)
我想得到一个图像,其中的主线是连续的(就像在第一个图像),但我得到了一个混乱的图像,如第二个。我尝试过很多事情,比如修改线条参数,但是我仍然得到类似于第一个图像的东西(每隔50步就有错误条)。
我做错了什么吗?能不能做我想做的。
更新1
正如David在注释中所说的,出现水平线是因为它是stderr的默认形状为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之间绘制直线。
非常感谢!
发布于 2013-03-22 05:48:02
好吧,你问错了,你得到了。相反,如果没有在参数列表中指定yerr
,则错误栏文档声明“如果yerr不是None,则绘制垂直错误条”。
我不明白使用errorbar
和设置yerr=0
的目的,但是yerr=0
错误条显示为小的水平线,因为一个零垂直扩展的错误条的样式。
如果要指示多个数据点的错误,最好使用阴影背景指示错误区域。这可以通过函数来实现。
编辑:在注释中使用精化的问题,绘图代码可以是
# plot all points without error bars
plot(iterations, average)
# plot errorbars for every 50th point
errorbar(iterations[::50], average[::50], yerr=error[::50])
https://stackoverflow.com/questions/15571843
复制