cmap python matplotlib normalize

python - cmap - ¿Cómo puedo dibujar un gráfico imshow log normalizado con una barra de color que representa los datos en bruto en matplotlib?



imshow python (2)

¡Sí hay! Utilice LogNorm . Aquí hay un extracto de código de una utilidad que escribí para mostrar matrices de confusión en una escala de registro.

from pylab import figure, cm from matplotlib.colors import LogNorm # C = some matrix f = figure(figsize=(6.2,5.6)) ax = f.add_axes([0.17, 0.02, 0.72, 0.79]) axcolor = f.add_axes([0.90, 0.02, 0.03, 0.79]) im = ax.matshow(C, cmap=cm.gray_r, norm=LogNorm(vmin=0.01, vmax=1)) t = [0.01, 0.1, 0.2, 0.4, 0.6, 0.8, 1.0] f.colorbar(im, cax=axcolor, ticks=t, format=''$%.2f$'') f.show()

Estoy usando matplotlib para trazar imágenes normalizadas de registro, pero me gustaría que los datos de imagen sin procesar originales se representen en la barra de colores en lugar del intervalo [0-1]. Me da la sensación de que hay una forma más sencilla de hacerlo utilizando algún tipo de objeto de normalización y no transformando los datos de antemano ... en cualquier caso, podría haber valores negativos en la imagen en bruto.

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)

He intentado usar cb.set_array, pero eso no parece hacer nada, y cb.set_clim, pero eso vuelve a escalar los colores por completo.