python - example - plt.imshow jpg
Definir un mapa de color discreto para imshow en matplotlib (2)
Tengo una imagen simple que estoy mostrando con imshow en matplotlib. Me gustaría aplicar un mapa de colores personalizado para que los valores entre 0-5 sean blancos, 5-10 sean rojos (colores muy simples), etc. He intentado seguir este tutorial:
http://assorted-experience.blogspot.com/2007/07/custom-colormaps.html con el siguiente código:
cdict = {
''red'' : ((0., 0., 0.), (0.5, 0.25, 0.25), (1., 1., 1.)),
''green'': ((0., 1., 1.), (0.7, 0.0, 0.5), (1., 1., 1.)),
''blue'' : ((0., 1., 1.), (0.5, 0.0, 0.0), (1., 1., 1.))
}
my_cmap = mpl.colors.LinearSegmentedColormap(''my_colormap'', cdict, 3)
plt.imshow(num_stars, extent=(min(x), max(x), min(y), max(y)), cmap=my_cmap)
plt.show()
Pero esto termina mostrando colores extraños, y solo necesito 3-4 colores que quiero definir. ¿Cómo hago esto?
Puede usar un ListedColormap
para especificar el blanco y el rojo como los únicos colores en el mapa de color, y los límites determinan dónde está la transición de un color al siguiente:
import matplotlib.pyplot as plt
from matplotlib import colors
import numpy as np
np.random.seed(101)
zvals = np.random.rand(100, 100) * 10
# make a color map of fixed colors
cmap = colors.ListedColormap([''white'', ''red''])
bounds=[0,5,10]
norm = colors.BoundaryNorm(bounds, cmap.N)
# tell imshow about color map so that only set colors are used
img = plt.imshow(zvals, interpolation=''nearest'', origin=''lower'',
cmap=cmap, norm=norm)
# make a color bar
plt.colorbar(img, cmap=cmap, norm=norm, boundaries=bounds, ticks=[0, 5, 10])
plt.savefig(''redwhite.png'')
plt.show()
La figura resultante tiene solo dos colores:
Propuse esencialmente lo mismo para una pregunta algo diferente: visualización de datos de cuadrícula 2D en Python
La solución está inspirada en un ejemplo matplotlib . El ejemplo explica que los bounds
deben ser uno más que el número de colores utilizados.
BoundaryNorm
es una normalización que asigna una serie de valores a enteros, que luego se utilizan para asignar los colores correspondientes. cmap.N
, en el ejemplo anterior, solo define el número de colores.
para LinearSegmentedColormap
por qué LinearSegmentedColormap
muestra un color extraño, creo que este enlace sería útil.
http://matplotlib.org/examples/pylab_examples/custom_cmap.html