2013-07-08 8 views
5

Bitte vergib mir, wenn das eine wiederholte Frage ist, habe ich mein Bestes getan, um nach einer Lösung zu suchen. Das scheint sehr einfach zu sein, aber ich finde nichts Anwendbares.numpy Histogramm mit 3 Variablen

Ich versuche, ein Diagramm (wie eine Heatmap) mit Daten aus 3 1-d numpy Arrays zu generieren. Die Daten sind im Wesentlichen wie folgt angeordnet:

x_axis = ([1, 4, 6]) 
y_axis = ([2, 5, 7]) 
z_axis = ([5, 8, 9]) 

(meine Datensätze sind eigentlich viel größer ... manchmal Hunderttausende von Einträgen).

Also habe ich z_axis Werte, die jeweils mit einer x-Koordinate und y-Koordinate verbunden sind ... zum Beispiel hat der Punkt (1,2) den Wert 5 zugeordnet.

Alles, was ich tun will, ist dies so zu plotten, dass die z-Werte für jede von mir spezifizierte Bin-Größe gemittelt und wie eine Heatmap farbcodiert werden. Wenn ich zum Beispiel 10 Datenpunkte habe, die in eine gegebene Bin fallen, werden ihre Z-Werte gemittelt und dieser Wert wird irgendwo in ein Farbspektrum fallen.

Vielen Dank für Ihre Hilfe.

Antwort

6

Von np.histogram2d:

import matplotlib.pyplot as plt 
H, xedges, yedges =np.histogram2d(x_axis, y_axis, bins=10, weights=z_axis) 
extent = [yedges[0], yedges[-1], xedges[-1], xedges[0]] 
plt.imshow(H, extent=extent, interpolation='nearest') 
plt.colorbar() 
plt.show() 

Bin Zahl leicht verändert wird.

Als Jamie in den Kommentaren darauf hingewiesen, wenn Sie den Mittelwert der Punkte in jedem Fach wollen:

numbins=10 
H, xedges, yedges =np.histogram2d(x_axis, y_axis, bins=numbins, weights=z_axis) 
count, x, y =np.histogram2d(x_axis, y_axis, bins=numbins) 
H/=count 
+0

Wenn er will mittelt, nicht Summen, Sie 'laufen müssen np.histogram2d' wieder ohne das Schlüsselwort "weights", um die Zähler in jeder Klasse abzurufen und die Aufteilung der beiden Arrays zu zeichnen. – Jaime

+0

Das ist ein guter Punkt, ich habe die Frage nicht so gelesen. Ich dachte, er formulierte es so, wie das Array für die Farben normalisiert werden sollte, aber plt interessiert sich nicht in beiden Fällen. – Daniel

+0

Danke euch beiden ... diese Routine funktioniert wunderbar. – Teachey