Barra de colores arbitraria

Tengo datos que están en el rango -70,0 que muestro usando imshow () y me gustaría usar una barra de color no lineal para representar los datos ya que tengo paternos tanto en el rango -70, -60 como en el -70, Rango 0 Me gustaría la forma más fácil de volver a escalar / renormalizar usando una función arbitraria (ver ejemplo) en la barra de colores para que todos los padres aparezcan bien.

Aquí hay un ejemplo de datos y funciones:

sample_data=(np.ones((20,20))*np.linspace(0,1,20)**3)*70-70 def renorm(value): """ Example of the way I would like to adjust the colorbar but it might as well be an arbitrary function Returns a number between 0 and 1 that would correspond to the color wanted on the original colorbar For the cmap 'inferno' 0 would be the dark purple, 0.5 the purplish orange and 1 the light yellow """ return np.log(value+70+1)/np.log(70+1) 

barra de colores esperada

Esto es lo que logré hacer:

 import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import PowerNorm sample_data=(np.ones((20,20))*np.linspace(0,1,20)**3)*70-70 plt.figure() im = plt.imshow(sample_data+70, norm=PowerNorm(gamma=0.5)) cbar = plt.colorbar(orientation='horizontal') cbar.ax.set_xticklabels(np.arange(-70, 0, 8)) plt.show() 

introduzca la descripción de la imagen aquí

Puedes cambiar el gamma . Sin embargo, este tipo de visualización no se recomienda, consulte: http://matplotlib.org/users/colormapnorms.html en “Power-law” -> “Note”