Grafico di superficie da immagine con valore di soglia

Aug 19 2020

Voglio creare un grafico di superficie da un array bidimensionale, in cui sono memorizzati i valori z (simile a un'immagine in cui vengono forniti i valori dei pixel).

I miei dati sono un array 512x512 come:

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.]])

I valori di interesse sono nella parte centrale dell'immagine.

Immagine in cui solo la regione circolare centrale deve essere tracciata come grafico di superficie

Ho fatto il grafico di superficie con:

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

Il risultato è:

Immagine risultante senza alcun mascheramento o soglia

A parte un cattivo stile, voglio solo tracciare la regione centrale circolare e non tracciare la regione quadrata esterna dove tutti i valori sono zero.

Come posso dare una soglia o una maschera ai valori? O c'è un approccio molto migliore? Apprezzerei davvero un esempio dato che sono abbastanza nuovo in Python/numpy ect.

Grazie mille!

Risposte

2 P.Leibner Aug 19 2020 at 15:11

Un modo per sopprimere il tracciamento degli zeri nel grafico della superficie è sostituire gli zeri (o tutti i valori che non si desidera tracciare) nel proprio Z-Array con nan come questo:

Z[Z==0]=np.nan

Questo dovrebbe darti la trama desiderata.