Problemi con zero in matplotlib.colors.logolorm
-
13-11-2019 - |
Domanda
Sto tracciando un istogramma usando
plt.imshow(hist2d, norm = LogNorm(), cmap = gray)
.
Dove hist2d
è una matrice di valori di istogramma.Questo funziona bene tranne che per elementi in hist2d
zero.In particolare, ottengo la seguente immagine
Ma vorrei che le patch bianche siano nere.
Grazie!
Soluzione
Ecco un metodo alternativo che non richiede di muccare con i tuoi dati impostando un valore RGB per i pixel cattivi.
import copy
data = np.arange(25).reshape((5,5))
my_cmap = copy.copy(matplotlib.cm.get_cmap('gray')) # copy the default cmap
my_cmap.set_bad((0,0,0))
plt.imshow(data,
norm=matplotlib.colors.LogNorm(),
interpolation='nearest',
cmap=my_cmap)
.
Il problema è che i contenitori con 0
non possono essere registrati correttamente normalizzati in modo che vengano contrassegnati come "cattivi", che sono mappati in modo diverso.Il comportamento predefinito è quello di non disegnare nulla su quei pixel.Puoi anche specificare quale colore disegnare pixel che sono sopra o sotto i limiti della mappa dei colori (il valore predefinito è quello di disegnarli come il colore più alto / basso).
Altri suggerimenti
Se sei felice con il ridimensionamento del colore così com'è, e vuoi semplicemente che i valori 0 siano neri, cambierei semplicemente la matrice di ingresso in modo che gli 0s siano sostituiti dal valore più piccolo successivo:
import matplotlib.pyplot as plt
import matplotlib.cm, matplotlib.colors
import numpy
hist2d = numpy.arange(9).reshape(3,3)
plt.imshow(numpy.maximum(hist2d, sorted(hist2d.flat)[1]),
interpolation='nearest',
norm = matplotlib.colors.LogNorm(),
cmap = matplotlib.cm.gray)
.
Produce
Mimum Picture">
è stato generato con la funzione MATPLOTLIB Hist2D?
Tutto ciò che devi fare è passare attraverso la matrice e impostare un po 'di valore arbitrario del pavimento, quindi assicurati di tracciare questo con i limiti fissi
for f in hist2d:
f += 1e-3
.
Poi quando si mostra la figura, tutto lo spazio bianco sarà ora al valore del pavimento e verrà visualizzato sulla trama logiano.Tuttavia, se silenzi Hist2D scegli automaticamente il ridimensionamento per te, vorrà utilizzare il valore del piano 1E-3 come minimo.Per evitare ciò, è necessario impostare i valori VMin e VMAX in Hist2D
hist2d(x,y,bins=40, norm=LogNorm(), vmin=1, vmax=1e4)
.