cjo*_*jol 3 python matplotlib errorbar
据我所知,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()
Run Code Online (Sandbox Code Playgroud)

正如 @Bart 在评论中指出的那样,matplotlib 将其解释yerr为一组相对于线的 y 坐标的 +/- 偏移量。从文档中:
xerr/yerr: [ 标量 | N、Nx1 或 2xN 类似数组 ]如果是标量、len(N) 类似数组的对象或 Nx1 类似数组的对象,则误差线将绘制在相对于 data 的 +/- 值处。
如果形状为 2xN 的序列,则在相对于数据的 -row1 和 +row2处绘制误差条。
y您可以通过取和之间的绝对差来获得您想要的效果err:
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()
Run Code Online (Sandbox Code Playgroud)