据我所知,matplotlib只是为我的错误条绘制了错误的值。我已经尽可能地简化了我的代码,在值和事情仍然是错误的硬编码。。。在下面的例子中,我通过scatter绘制了完全相同的值,它们出现在我希望它们出现的地方——但是误差条离我很远。我误解了什么吗?
最小示例:

from matplotlib.pyplot import *

x = [1, 2, 3, 4, 5]
y = [5, 11, 22, 44, 88]
err = [[4.3, 10.1, 19.8, 40, 81.6],
       [5.9, 13.6, 24.6, 48.5, 100.2]]

figure();
errorbar(x, y, yerr=err, label="data")
scatter(x, err[0], c='r', label="lower limit")
scatter(x, err[1], c='g', label="upper limit")

legend()
show()

结果:python - Matplotlib不对称的yerr方式-LMLPHP

最佳答案

正如@Bart在注释中指出的,matplotlib将yerr解释为相对于直线的y坐标的一组正负偏移。从the documentation
xerr/yerr:[标量N、Nx1或2xN数组类似]
如果是标量数、len(N)数组类型的对象或Nx1数组类型的对象,则会在相对于数据的+/-值处绘制错误条。
如果是2xN形状的序列,则错误栏相对于数据在-row1和+row2处绘制。
你可以通过在yerr之间取绝对差来获得你想要的效果:

err = np.array(err)
y = np.array(y)
offsets = np.abs(err - y[None, :])

figure();
errorbar(x, y, yerr=offsets, label="data")
scatter(x, err[0], c='r', label="lower limit")
scatter(x, err[1], c='g', label="upper limit")
legend()
show()

python - Matplotlib不对称的yerr方式-LMLPHP

10-04 14:29