Я использую matplotlib для построения изображений с нормированным логом, но я хотел бы, чтобы исходные данные необработанного изображения были представлены в цветовой полосе, а не интервал [0-1]. У меня возникает ощущение, что есть более матрепольный способ сделать это, используя какой-то объект нормализации, а не заранее преобразовывать данные ... в любом случае в необработанном изображении могут быть отрицательные значения.Как я могу нарисовать нормированный log-график imshow с цветной панелью, представляющей необработанные данные в 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)
Я попытался с помощью cb.set_array, но это, кажется, не делать ничего, и cb.set_clim, но полностью перемасштабирует цвета.
Таким образом, очевидно, я могу передать экземпляр нормализации в imshow и изображение будет нормализована для меня: Рез = ax.imshow (им, норма = mpl.colors.LogNorm()) Тем не менее, если я прикрепляю цветную панель, значения устанавливаются в нормализованные валы, а не в необработанные данные. –