Plotten einer Heat-Map-X -, Y-Intensität Von Drei Listen
Ich weiss nicht, wie das erstellen einer heatmap (oder contour-plot), wenn ich x,y,Intensität. Ich habe eine Datei die wie folgt aussieht:
0,1,6
0,2,10
....
Bisher:
with open('eye_.txt', 'r') as f:
for line in f:
for word in line.split():
l = word.strip().split(',')
x.append(l[0])
y.append(l[1])
z.append(l[2])
Versucht, mit pcolormesh aber es will ein shape-Objekt und ich bin mir nicht sicher, wie konvertiert diese Listen in ein numpy-array.
Habe ich versucht:
i,j = np.meshgrid(x,y)
arr = np.array(z)
plt.pcolormesh(i,j,arr)
plt.show()
Sagt es mir, dass:
IndexError: too many indices
Kann jemand mich stoppen von bashing meinen Kopf gegen die Tastatur bitte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, es gibt ein paar Schritte, um diesen.
Ersten, einen viel einfacheren Weg, um Lesen Sie Ihre Daten-Datei ist mit
numpy.genfromtxt
. Sie können das Trennzeichen ein Komma mit derdelimiter
argument.Weiter, wir wollen ein 2D-Netz von
x
undy
, so müssen wir speichern nur die eindeutigen Werte, die sich von den arrays zu ernähren, zunumpy.meshgrid
.Schließlich können wir die Länge der beiden arrays, die die Umgestaltung unserer
z
array.(HINWEIS: Diese Methode setzt Voraus, Sie haben ein regelmäßiges Gitter mit einer
x
,y
undz
für jeden Punkt auf dem Gitter).Beispiel:
In Fall, dass Sie don ' T haben ein regelmäßiges Gitter (d.h. ein Wert von z für jede meshgrid Wert von x und y), die Sie verwenden können, eine weitere Allgemeine Methode basiert auf pandas data frames:
Die pivot-Methode verwenden, die eindeutige Werte aus index-und Spalten um eine Tabelle zu erstellen mit fehlenden Messungen auf NaN gesetzt. Die Tabelle kann dann grafisch dargestellt werden, z.B. als heatmap.
Den index Fehler ergibt sich aus der Tatsache, dass pcolormesh erwartet ein 2D-array, während Ihre
arr
ist ein 1D-Vektor. Auch, wenn ich das richtig verstanden, deine input-Datei hat die formIn diesem Fall
meshgrid(x,y)
wird nicht funktionieren, da es erwartet, dass so etwas wiemeshgrid(range(xmax),range(ymax))
also Vektoren ohne wiederholte Werte.In Ihrem Fall, die Sie benötigen, um herauszufinden, wie viele unterschiedliche x-und y-Werte es gibt und dann einfach verändern Sie Ihre Vektoren in 2D-arrays.
Umwandeln einer Liste in einen numpy-array können Sie
np.asarray
.Hier ist eine einfache Möglichkeit, um eine heatmap, Sie sollten anpassen zu können, diesem Beispiel zu deinem problem.
Zum Lesen der Daten, wie eine Liste von Listen, die Sie tun können:
kurz. In einer längeren version es ist das äquivalent zu: