Domanda

Sto cercando di usare imshow in matplotlib ai dati del diagramma come heatmap, ma alcuni dei valori sono NaN. Mi piacerebbe le NaNs essere reso come un colore speciale non trovato nella mappa dei colori.

Esempio:

import numpy as np
import matplotlib.pyplot as plt
f = plt.figure()
ax = f.add_subplot(111)
a = np.arange(25).reshape((5,5)).astype(float)
a[3,:] = np.nan
ax.imshow(a, interpolation='nearest')
f.canvas.draw()

L'immagine risultante è inaspettatamente tutto blu (il colore più basso della mappa di colori a getto). Tuttavia, se faccio il tracciato in questo modo:

ax.imshow(a, interpolation='nearest', vmin=0, vmax=24)

- poi ho qualcosa di meglio, ma i valori NaN sono disegnate lo stesso colore Vmin ... C'è un modo aggraziato che posso impostare NaNs essere disegnati con un colore speciale (ad esempio: grigio o trasparente)?

È stato utile?

Soluzione

Hrm, sembra che posso utilizzare un array mascherato per fare questo:

masked_array = np.ma.array (a, mask=np.isnan(a))
cmap = matplotlib.cm.jet
cmap.set_bad('white',1.)
ax.imshow(masked_array, interpolation='nearest', cmap=cmap)

Questo dovrebbe essere sufficiente, anche se sono ancora aperti ai suggerimenti. :]

Altri suggerimenti

Con le nuove versioni di Matplotlib, non è necessario utilizzare più una matrice mascherato.

Per esempio, si generano un array in cui ogni valore 7 è un NaN:

arr = np.arange(100, dtype=float).reshape(10, 10)
arr[~(arr % 7).astype(bool)] = np.nan

Si può modificare la mappa di colori corrente e tracciare l'array con le seguenti righe:

current_cmap = matplotlib.cm.get_cmap()
current_cmap.set_bad(color='red')
plt.imshow(arr)

risultato complotto

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top