2016-08-08 2 views
1

Я пытаюсь сделать график ошибок с моими данными. X - это 9-элементный ndarray. Y и Yerr - 9x5 ndarrays. Когда я звоню:matplotlib.pyplot.errorbar бросает ошибку, это не должно быть?

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

Я получаю ValueError: «yerr должен быть скаляром, одни и те же размеры, как у или 2XN.»

Но Y.shape == Yerr.shape Настоящий.

Я работаю на 64-битной Windows 7 с Spyder 2.3.8 и Python 3.5.1. Matplotlib обновлен. Я установил Visual C++ Redistributable для Visual Studio 2015.

Любые идеи?

Редактировать: Некоторые данные.

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

включают некоторый код, который генерирует данные примера, который вызывает этот вопрос –

+0

Хммм .. сообщение об ошибке не согласуется с docstring, в котором говорится: * * xerr */* yerr *: [scalar | N, Nx1 или 2xN). –

ответ

0

Может быть, «измерением у» Документов на самом деле означало 1xN ...

Во всяком случае, это может работать:

for y, yerr in zip(Y, Yerr): 
    matplotlib.pyplot.errorbar(X, y, yerr) 
0

Хммм ....

изучая линии 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, =» также кажется немного странным.

Смежные вопросы