Oberflächenplot aus Bild mit Schwellenwert
Ich möchte ein Oberflächendiagramm aus einem zweidimensionalen Array erstellen, in dem die Z-Werte gespeichert sind (ähnlich einem Bild, in dem die Pixelwerte angegeben sind).
Meine Daten sind ein 512x512-Array wie:
Z
Out[85]:
array([[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
...,
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.]])
Die interessierenden Werte befinden sich im mittleren Teil des Bildes.
Bild, bei dem nur der zentrale kreisförmige Bereich als Oberflächendiagramm gezeichnet werden soll
Ich habe das Oberflächendiagramm mit:
X = np.arange(1, 513)
Y = np.arange(1, 513)
X, Y = np.meshgrid(X, Y)
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, vmin=0.01)
plt.show()
Das Ergebnis ist:
Ergebnisbild ohne Maskierung oder Schwellenwertbildung
Abgesehen von einem schlechten Stil möchte ich nur den kreisförmigen zentralen Bereich zeichnen und nicht den äußeren quadratischen Bereich, in dem alle Werte Null sind.
Wie kann ich den Werten einen Schwellwert oder eine Maske geben? Oder gibt es einen viel besseren Ansatz? Ich würde mich sehr über ein Beispiel freuen, da ich ziemlich neu in Python/numpy ect bin.
Vielen Dank!
Antworten
Eine Möglichkeit, das Zeichnen von Nullen in Ihrem Oberflächendiagramm zu unterdrücken, besteht darin, die Nullen (oder alle Werte, die Sie nicht zeichnen möchten) in Ihrem Z-Array durch nans wie folgt zu ersetzen:
Z[Z==0]=np.nan
Dies sollte Ihnen das gewünschte Grundstück geben.