我试着画一些条形图,其中每个y值都是在一些级数上的平均值。因此,我还试图为每个条添加错误条(标准差)。
即使是在对数尺度上,震级似乎也是正确的,但对于一些条形图,误差条几乎无限期地下降(-方向),而+方向误差是正确的大小。我不认为这只是日志缩放,但任何输入都是非常感谢的。这里有一个指向这个情节的链接
我已经检查过了,并且+方向错误条是正确的,只是不确定它们为什么/如何偶尔下降到x轴。下面是一个简化的例子。
y = [99.79999999999997, 0.11701249999999999, 0.00011250000000000004, 0.013393750000000001,0.007743750000000001,
0.01, 0.033906250000000006, 0.0009687500000000002, 0.04187500000000001, 0.0218, 0.0018062499999999997, 0.0005187500000000001]
std =[0.013662601021279521, 0.1500170651403811, 3.4156502553198664e-05, 0.001310709095617076,0.0006239324215543433,
0.0, 0.0021671698133741164,0.0018750000000000001, 0.005302515126491074,0.007984401459512583,0.0006297817082132506,4.0311288741492725e-05]
plt.figure() # Powder plot
plt.bar(np.arange(len(y)), y, yerr=std)
plt.yscale('log')
“key_list”只是一个字符串列表,它将成为x-滴答标签。“宽度”是成对排列的条形偏移量。“‘cm”和“kk”只是列表的字典。老实说,这似乎是一个渲染问题,但我很好奇你们中是否有人遇到过这种情况。
发布于 2019-06-03 12:58:41
正如注释中提到的,这是因为您的std
比y
大(例如,std[1] > y[1]
,因此log
比例尺变大了)。您可以通过向较低的std
引入一个小公差来解决这个问题。
tor = 1e-9
lower_std = [a - tor if a<b else b for a,b in zip(y,std)]
plt.figure()
plt.bar(np.arange(len(y)), y, yerr=(lower_std,std))
plt.yscale('log')
plt.show()
输出:
发布于 2022-08-05 01:20:49
您应该查看相对误差,而不是试图绘制标准偏差或任何其他可变性度量。
为了说明这一点,请举一个例子:
在线性空间中,需要显示x +/- delta_x。
投射到对数空间中,这将变成: log(x) +/- log(delta_x)。但是请记住log(x) - log(y) = x/y,因此,例如,您的非对称错误条。如果您了解有关相对错误的更多信息,您将找到一个适当的对称错误栏。
好好学习吧:)
https://stackoverflow.com/questions/56433933
复制相似问题