2016-12-13 2 views
1

Ich versuche ein 4D Array zu zeichnen, indem ich als 4. Dimension die Farbe verwende. Hier ist ein Beispiel meiner Matrix:Matplotlib 4D Daten in einem 2D Array

[[ 4.216 0.  1.  0. ] 
[ 5.36 0.  1.  0. ] 
[ 5.374 0.  2.  0. ] 
..., 
[ 0.294 0.  1.  0. ] 
[ 0.314 0.  2.  0. ] 
[ 0.304 0.  1.  0. ]] 

4. Spalte enthält nur Werte 0, 1 und 2.

Also, wenn ich versuche, es zu zeichnen dieses Skript:

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.scatter(data[:,0],data[:,1],data[:,2], c=data[:,3], cmap=plt.hot()) 
plt.show() 

Ich bin Dieser Fehler wird angezeigt:

TypeError: can't multiply sequence by non-int of type 'float' 
+0

Verwenden Sie numpy Arrays, keine einfachen Listen –

Antwort

2

Dies ist kein 4D-Array. Es ist ein 2D-Array mit 4 Spalten (die 2 Dimensionen könnten als "Zeilen" und "Spalten" bezeichnet werden). Aber ich sehe, was Sie sagen wollen - jede Zeile könnte so interpretiert werden, dass sie einen Punkt im 4-dimensionalen Raum beschreibt, wobei die vierte "Dimension" Farbe ist.

Zweidimensionalität ist eigentlich der Schlüssel zum Problem. Ich vermute, Ihre data Variable ist eine numpy.matrix eher als eine Vanille numpy.array. A matrix ist besondere Klasse von 2D-Array, das eine Vielzahl von speziellen Eigenschaften, einschließlich der Tatsache hat, dass ein Stück davon (zum Beispiel data[:, 0]) ist noch ein 2-dimensionales matrix Objekt, während .scatter() jedes Argument erwartet a zu sein 1-D-Array.

Das Update ist zu sagen:

data = numpy.asarray(data) 

Ihre Daten von einem matrix zu einem normalen Array Scheiben, deren Spalte wird 1-dimensionalen zu konvertieren.

BTW: Sie wollten wahrscheinlich sagen cmap='hot'. Der Aufruf plt.hot() setzt die Standard Colormap (so Ihre Abbildung kann richtig aussehen, aber es gibt einen Nebeneffekt), aber es gibt tatsächlich None zurück.