Sto usando matplotlib per tracciare immagini normalizzate per il log ma vorrei che i dati originali dell'immagine grezza venissero rappresentati nella barra dei colori piuttosto che l'intervallo [0-1]. Ho la sensazione che ci sia un modo più semplice di farlo usando una sorta di oggetto di normalizzazione e non trasformando i dati in anticipo ... in ogni caso, potrebbero esserci valori negativi nell'immagine grezza.Come posso disegnare un grafico di imshow normalizzato con il log con una colorbar che rappresenta i dati grezzi in matplotlib
import matplotlib.pyplot as plt
import numpy as np
def log_transform(im):
'''returns log(image) scaled to the interval [0,1]'''
try:
(min, max) = (im[im > 0].min(), im.max())
if (max > min) and (max > 0):
return (np.log(im.clip(min, max)) - np.log(min))/(np.log(max) - np.log(min))
except:
pass
return im
a = np.ones((100,100))
for i in range(100): a[i] = i
f = plt.figure()
ax = f.add_subplot(111)
res = ax.imshow(log_transform(a))
# the colorbar drawn shows [0-1], but I want to see [0-99]
cb = f.colorbar(res)
Ho provato con cb.set_array, ma che non sembra di fare nulla, e cb.set_clim, ma che ridimensiona completamente i colori.
Quindi a quanto pare posso passare un'istanza di normalizzazione in imshow e l'immagine sarà normalizzato per me: res = ax.imshow (im, norm = mpl.colors.LogNorm()) Ancora, se allego una barra di colore, i valori sono impostati sui valori normalizzati piuttosto che sui dati non elaborati. –