1

我正在尝试用我的数据制作一个误差线图。X 是一个 9 元素的 ndarray。Y 和 Yerr 是 9x5 ndarrays。当我打电话时:

matplotlib.pyplot.errorbar(X, Y, Yerr)

我得到一个 ValueError:“yerr 必须是一个标量,与 y 的尺寸相同,或者 2xN。”

但是Y.shape == Yerr.shape是真的。

我在带有 Spyder 2.3.8 和 Python 3.5.1 的 64 位 Windows 7 上运行。Matplotlib 是最新的。我已经为 Visual Studio 2015 安装了 Visual C++ Redistributable。

有任何想法吗?

编辑:一些数据。

X=numpy.array([1,2,3])
Y=numpy.array([[1,5,2],[3,6,4],[9,3,7]])
Yerr=numpy.ones_like(Y)
4

2 回答 2

1

嗯……

通过研究引发错误的模块的第 2962-2965 行,我们发现

if len(yerr) > 1 and not ((len(yerr) == len(y) and not (iterable(yerr[0]) and len(yerr[0]) > 1)))

从数据来看

1 T len(yerr) > 1
2 T len(yerr) == len(y)
3 T iterable(yerr[0])
4 T len(yerr[0]) > 1
5 T 1 and not (2 and not (3 and 4)

但是,如果以下测试未通过,则不会触发:

if (iterable(yerr) and len(yerr) == 2 and
                iterable(yerr[0]) and iterable(yerr[1])):
....

它没有被触发,因为 len(yerr) = 3

一切似乎都检查出来了,除了维度。这有效:

X = numpy.tile([1,2,3],3)
Y = numpy.array([1,5,2,3,6,4,9,3,7])
Yerr = numpy.ones_like(Y)

我不确定是什么导致了错误。"l0, = " 的赋值看起来也有点古怪。

于 2016-08-09T21:03:01.743 回答
1

也许通过“y的维度”,文档实际上意味着1xN ...

无论如何,这可以工作:

for y, yerr in zip(Y, Yerr):
    matplotlib.pyplot.errorbar(X, y, yerr)
于 2016-08-09T21:24:26.523 回答