Ich benutze Matplotlib log-normalisierte Bilder zu plotten, aber ich möchte die ursprünglichen rohen Bilddaten in der Farbleiste statt dargestellt werden das [0-1] Intervall. Ich habe das Gefühl, dass es eine andere Möglichkeit gibt, dies zu tun, indem man eine Art Normalisierungsobjekt verwendet und die Daten nicht vorher transformiert ... auf jeden Fall könnte es negative Werte im Rohbild geben.Wie zeichne ich ein log-normalisiertes Imshow-Diagramm mit einer Farbleiste, die die Rohdaten 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)
Ich habe versucht, cb.set_array verwenden, aber das scheint nichts zu tun, und cb.set_clim, aber das neu skaliert die Farben vollständig.
So offenbar ich eine Normalisierung Instanz in imshow passieren kann und das Bild wird für mich normalisiert werden: res = ax.imshow (im, Norm = mpl.colors.LogNorm()) Immer noch, wenn ich eine Farbleiste anschließe, werden die Werte auf die normalisierten Werte und nicht auf die Rohdaten gesetzt. –