Die Generierung einer heat-map mit 3D-Daten in matplotlib
Habe ich eine Funktion returnValuesAtTime
dass gibt drei Listen-x_vals
,y_vals
und swe_vals
. Alle drei Listen sind von gleicher Länge und jedes element in swe_vals
entspricht einer x-value
aus x_vals
und ein y-value
aus y_vals
. Ich möchte erzeugen eine heatmap mit einer Legende, verwendet die (x,y)
Koordinaten und die swe_vals
wie die Intensität.
Schrieb ich den folgenden code:
def plotValuesAtTimeMap(t):
x_vals,y_vals,swe_vals=returnValuesAtTime(t)
x_points=len(x_vals)
y_points=len(y_vals)
xx=np.linspace(x_vals[0],x_vals[-1],x_points)
yy=np.linspace(y_vals[0],y_vals[-1],y_points)
fig,ax=plt.subplots()
im=ax.pcolormesh(xx,yy,z)
fig.colorbar(im)
ax.axis('tight')
plt.show()
Einmal die drei Listen, die mit Hilfe returnValuesAtTime(t)
ich nehme die Längen der x_vals
und y_vals
. Dann verwende ich diese zu generieren, die den Abstand für die x-und y-Richtungen, mit den Grenzen, die ersten und letzten Elemente der x_vals
und y_vals
. Ich versuche dann zu generieren, die colormesh
. Aber dies gibt mir eine leere colormesh
ohne Werte.
Was könnte schief gehen? Wird mit Hilfe eines 3D - numpy
array statt der drei Listen, das problem zu lösen?
Den ersten 10 Elemente der einzelnen Listen sind:
x_vals[0:10]
[439936.86573189893,
439936.86573189893,
439936.86573189893,
439936.86573189893,
439936.86573189893,
439936.86573189893,
439936.86573189893,
439936.86573189893,
439936.86573189893,
439936.86573189893]
y_vals[0:10]
[4514018.2797159087,
4513898.2797159087,
4513778.2797159087,
4513658.2797159087,
4513538.2797159087,
4513418.2797159087,
4513298.2797159087,
4513178.2797159087,
4513058.2797159087,
4512938.2797159087]
swe_vals[0:10]
[2.7520323,
2.7456229,
2.7456021,
2.745455,
2.7478349,
2.7445269,
2.7484877,
2.7524617,
2.75491,
2.7509627]
Bearbeiten:
Ich habe eine scatter-plot zeigt die (x,y) grid-Bereich unter:
Den x-und y-Werte in Listen, 6804 Länge. Jedes (x,y) - Punkt hat eine entsprechende z-Wert in einer separaten Liste, die auch 6804 Länge. Um zu verdeutlichen, was ich hoffe zu erreichen, ich möchte erzeugen eine heatmap wie Grundstück mit der Größe der z-Achse, dargestellt durch die Farbe der einzelnen raster auf dem Grundstück. So etwas wie, was ist unten dargestellt:
In der Beispiel-plot, alle z-Werte sind die gleichen. Also die Farbe ist die gleiche über die gesamte grid-Raum.
Bearbeitet mit neuen resultierenden plot (basierend auf den CT-Zhu Vorschläge):
- Ist sicher davon ausgehen, dass Ihre
x_vals
undy_vals
nicht gleichmäßig verteilt, wie1,2,3,4,....
? Meistens wahrscheinlich ja, wie Sie haben eine Reihe vonxx=np.linspace(x_vals[0],x_vals[-1],x_points)
? - Sie sind gleichmäßig verteilt, wobei die ersten drei Elemente der x_vals wird [ 439936.8657319, 440056.8657319, 440176.8657319] und die ersten drei Elemente der y_vals wird [ 4514018.27971591, 4513898.27971591, 4513778.27971591]. Jedes element in x_vals wird 120.0 mehr als im Vorjahr, und jedes element in y_vals wird 120.0 weniger als die Vorherige.
- Ich sehe, wie ein kommen aus
meshgrid
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus, wenn umzugestalten
x
,y
,z
zu der quadratischen matrix, die Sie tun können, einecontourf
plot:x
undy
ist, tut es scheint eine gleichmäßig verteilte Quadrate? 6804 ist ein wenig seltsam und nicht zu einer quadratischen matrix, 82*83=8606len(set(x_vals))
? Wenn das Gitter 84*81, können Sie die heatmap wie beschrieben, aber verändern Sie Ihre Daten in(84,81)
dann eher eine quadratische matrix.