3

据我所知,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()

结果:上面代码示例的结果

4

2 回答 2

4

正如@Bart 在评论中指出的那样,matplotlib 解释yerr为一组相对于线的 y 坐标的 +/- 偏移量。从文档中

xerr/yerr: [ 标量 | N、Nx1 或 2xN 类数组]

如果是标量数、len(N) 类数组对象或 Nx1 类数组对象,则会在相对于数据的 +/- 值处绘制误差线。

如果是形状为 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()

在此处输入图像描述

于 2015-11-22T17:41:57.297 回答
3

误差线与数据相关,此外,两个 +/- 值均作为正值给出(因此是绝对误差):

from matplotlib.pyplot import *
import numpy as np

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

err2 = np.zeros_like(err)
err2[0,:] = y - err[0,:]
err2[1,:] = err[1,:] - y

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

legend()
show()

在此处输入图像描述

于 2015-11-22T17:43:20.420 回答