我试图绘制一些条形图,其中每个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-tick标签。'width'是条偏移量,以适应成对。'cm'和'kk'只是列表的字典。老实说,这看起来像是一个渲染问题,但我很好奇你们中是否有人遇到过这个问题。
2条答案
按热度按时间vom3gejh1#
就像在评论中提到的,这是因为你的
std
比y
大(例如std[1] > y[1]
,因此log
的刻度变大了。你可以通过对较低的std
引入一个小的容差来 * 修复 * 这个问题:输出:
6ojccjat2#
您应该查看相对误差,而不是试图绘制标准差或任何其他变异性度量。
下面用一个例子来说明这一点:
在你的线性空间中,你将有x +/- delta_x要显示。
投影到对数空间中,它变为:log(x)+/- log(delta_x)。但是记住log(x)- log(y)= log(x/y)。因此,例如,你的非对称误差线。如果你了解更多关于相对误差的知识,你会发现一个合适的对称误差线。
享受你的学习:)