2017-01-18 4 views
0

Ich bin neu in Python.
Ich habe einen Datensatz wiematplotlib 2d histrogram Heatmap - Wie benutze ich meinen Datensatz um einen zu erstellen?

import numpy as np 
from matplotlib import pyplot as plt  
dats = np.array([r1,x1,y1],[r2,x2,y2],...]) 

Ich mag würde Farbintensität mit r1, r2, ... an der Position (x1, y1), (x2, y2), und so weiter jeweils zugehörigen plotten.

Wie kann ich diesen Datensatz in einem Format manipulieren, das matplotlib in einem 2D-Histogramm verwenden kann?
Jede Hilfe sehr geschätzt. Ich werde andere im Gegenzug helfen, wenn ich etwas Geschick gewonnen habe: o

Antwort

0

Sie interpolierte Daten aus einer Reihe von Punkten erstellen griddata verwenden, dann x = [x1, x2, etc] und r = [r1, r2, etc] unter der Annahme,

#Setup a grid 
xi = np.linspace(x.min(),x,max(),100) 
yi = np.linspace(y.min(),y.max(),100) 
zi = griddata(x, y, r, xi, yi, interp='linear') 

#Plot the colormap 
cm = plt.pcolormesh(xi,yi,zi) 
plt.colorbar() 
plt.show() 

Weitere Optionen sind Färbung Streudiagramme,

plt.scatter(x,y,c=r) 

oder gibt es eine 2D-Histogramm Funktionen in scipy wo Sie die Gewichte auf Basis von r einstellen könnte,

H, xedges, yedges = np.histogram2d(x, y, w_i = r) 

Ich habe den letzten persönlich nicht verwendet.

1

Um ein 2D-Histogramm zu erstellen, muss Ihr Datensatz zwei Datenwerte und nicht einen Datenwert und zwei Indizes enthalten. Daher benötigen Sie zwei Arrays: eines mit den Werten r1 und eines mit den Werten r2. Ihre Daten haben keine Werte r2, daher können Sie ein zweidimensionales Histogramm nicht berechnen.

In Bezug auf Ihre Frage wollen Sie nicht einmal ein Histogramm. Sie möchten nur Ihre r1 Werte auf einer Ebene visualisieren. Das ist einfach. Sprich: Ihr Array dats eine Länge von 100 hat, dann gilt:

rs = dats[:, 0] # retrieve r-values from dats 

plt.imshow(rs.reshape(10, 10), cmap='Greys', interpolation='None') 
plt.colorbar() 
0

Ich denke, was Sie suchen kein Histogramm ist aber ein Konturdiagramm (ein Histogramm, das die Anzahl der Vorkommen eines Koordinaten zählen würde (x, y) in einen Abfalleimer fallen).

Wenn Ihre Daten nicht auf einem Raster, können Sie tricontourf verwenden:

plt.tricontourf(dats[:,1],dats[:,2],dats[:,0],cmap='hot') 
plt.colorbar() 
plt.show() 

Es gibt mehr Möglichkeiten, dies zu zeichnen, wie Streudiagramme usw.

Verwandte Themen