2016-08-08 58 views
1

Ich versuche, ein Fehlerbar-Diagramm mit meinen Daten zu machen. X ist ein 9-Element-ND-Array. Y und Yerr sind 9x5 ndarrays. Als ich nennen:matplotlib.pyplot.errorbar wirft einen Fehler, sollte es nicht?

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

ich ein Valueerror bekommen: „yErr ein Skalar sein müssen, die gleichen Abmessungen wie y, oder 2 × N.“

Aber Y.shape == Yerr.shape ist True.

Ich laufe auf 64 Bit Windows 7 mit Spyder 2.3.8 und Python 3.5.1. Matplotlib ist auf dem neuesten Stand. Ich habe Visual C++ Redistributable für Visual Studio 2015 installiert.

Irgendwelche Ideen?

Edit: Einige Daten. Hmmm

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

umfassen einige Codes, die Beispieldaten erzeugt, die dieses Problem lösen –

+0

Hmmm .. Die Fehlermeldung stimmt nicht mit dem Docstring überein, der '* xerr */* yerr *: [scalar | N, Nx1 oder 2xN array-like] '. –

Antwort

0

Vielleicht von "Dimension y" der Dokumentation 1xN eigentlich gemeint ...

Wie auch immer, dies funktionieren könnte:

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

....

Durch das Studium Linien 2962-2965 des Moduls, das den Fehler auslöst, wir finden

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

Aus den Daten

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) 

Dies wird jedoch nicht ausgelöst, wenn der folgende Test nicht bestanden wird:

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

Und es wird nicht ausgelöst, weil len (yErr) = 3

Alles scheint, um zu prüfen, mit Ausnahme der Dimensionalität. Dies funktioniert:

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

Ich bin mir nicht sicher, was den Fehler verursacht. Die Zuordnung "l0, =" wirkt ebenfalls etwas eigenartig.