使用matplotlib绘制不对称错误栏

时间:2017-07-31 19:19:10

标签: python-3.x matplotlib

我正在尝试绘制非对称误差条,这实际上是95%的置信区间。我得到的输出不是理想的结果。我不确定代码的哪一部分没有产生预期的结果。

import numpy as np
import matplotlib.pyplot as plt


x = (18,20,22,24,26,28,30,32,34)
apo_average = (1933.877,1954.596,2058.192,2244.664,2265.383,2265.383,2306.821,2534.731,2576.169)
std_apo=(35.88652754,0,179.4326365,35.88652754,0,0,35.88652754,35.88652696,0)
error =  np.array(apo_average)
lower_error_apo=error-((4.303*(np.array(std_apo)))/np.sqrt(3))
higher_error_apo=error+((4.303*(np.array(std_apo)))/np.sqrt(3))
asymmetric_error_apo=[lower_error_apo, higher_error_apo]

fig = plt.figure()
ax = fig.add_subplot(111)
plt.scatter(x,apo_average,marker='o',label="0 Cu", color='none', edgecolor='blue', linewidth='1')
ax.errorbar(x,apo_average,yerr=asymmetric_error_apo, markerfacecolor='blue',markeredgecolor='blue')

结果是enter image description here

这是非常意外的。例如,我打算将第一个错误栏的较低错误设置为1844.723,这与图片中显示的内容不一致。每个误差条都保持相同的趋势。

1 个答案:

答案 0 :(得分:3)

大多数情况下,阅读the documentation状态

会有所帮助
  

xerr/yerr:标量或类似数组,形状(N,)或形状(2,N),可选

  如果是标量数,len(N)类数组对象或类似N元素数组的对象,则会在+/-值处绘制相对于数据的错误列。默认值为“无”   如果形状为2xN的序列,则相对于数据在-row1和+ row2 处绘制错误栏。

因此,您需要直接使用从标准差计算的值,而不是从中减去它们或将它们加到平均值中。

lower_error_apo=(4.303*(np.array(std_apo)))/np.sqrt(3)
higher_error_apo=(4.303*(np.array(std_apo)))/np.sqrt(3)