为什么对数比例matplotlib条形图中的误差条偏斜?

时间:2019-06-03 20:11:06

标签: python matplotlib plot

我正在尝试绘制一些条形图,其中每个y值在某些系列中取平均值。因此,我也试图为每个条添加误差条(标准偏差)。

即使在对数标度上,幅值通常看起来也是正确的,但是对于几个条形图,误差条几乎无限期地下降(-方向),而+方向误差是正确的幅值。我不认为它只是对数缩放,但是任何输入都将不胜感激。这是情节的链接

Here is a link to the plot

我已经检查过,并且+方向误差条是正确的,只是不确定为什么/为什么它们偶尔会下降到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标签的字符串列表。 “宽度”是可成对放置的钢筋偏移量。 “ cm”和“ kk”只是列表的字典。老实说,这似乎是一个渲染问题,但是如果您中的任何人遇到这个问题,我通常会感到好奇。

1 个答案:

答案 0 :(得分:0)

就像评论中提到的那样,是因为您的stdy大(例如std[1] > y[1],因此log的等级变成了香蕉。您可以 fix ,这是通过对较低的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()

输出:

enter image description here