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:

Die Generierung einer heat-map mit 3D-Daten in matplotlib

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:

Die Generierung einer heat-map mit 3D-Daten in matplotlib

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):

Die Generierung einer heat-map mit 3D-Daten in matplotlib

  • Ist sicher davon ausgehen, dass Ihre x_vals und y_vals nicht gleichmäßig verteilt, wie 1,2,3,4,....? Meistens wahrscheinlich ja, wie Sie haben eine Reihe von xx=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
InformationsquelleAutor small_world | 2014-04-04
Schreibe einen Kommentar