import matplotlib.pyplot as plt import numpy as npTengo una matriz numpy 2D:
mock=\ np.array([[0.1,0.2,0.3], [0.2,0.3,0.4], [0.3,0.4,0.5], [0.4,0.5,0.6], [0.5,0.6,0.7], [0.6,0.7,0.8], [0.7,0.8,0.9]]) Trazo estos valores usando el mapa de tab20c , de los llamados mapas de colores "cualitativos":
plt.figure(figsize=(6,6)) im = plt.imshow(mock,cmap = "tab20c", vmin=0, vmax=1) plt.colorbar(im)¿Cómo haría esto si quisiera que todos los valores estuvieran por debajo de cierto valor, digamos que 0.25 tuviera el mismo color que tiene 0.25, reemplazando no solo los colores en el gráfico en sí, sino también en la barra de colores? El resultado esperado sería entonces: los 3 cuadrados en la esquina superior izquierda serían rojos, los 5 rectángulos inferiores en el mapa de colores también serían todos rojos.
Al hacer esto, básicamente estoy modificando el intervalo para el color rojo en el gráfico de barras: en lugar de mostrar los valores en el intervalo entre 0,2 y 0,25 como rojo, la nueva versión mostrará todo en el intervalo entre 0 y 0,25 rojo.
¿Qué pasa con el uso de numpy.clip para establecer los datos por debajo de 0,25 a 0,25?
im = plt.imshow(np.clip(mock, 0.25, np.inf), cmap = "tab20c", vmin=0, vmax=1)Esta parece ser la solución más sencilla para mí, ya que no requiere alterar los parámetros de trazado.
producción:
Puede adaptar un mapa de colores existente:
import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from matplotlib.colors import ListedColormap, LinearSegmentedColormap tab20c = cm.get_cmap('tab20c', 256) newcolors = tab20c(np.linspace(0, 1, 256)) red = np.array([1, 0, 0, 1]) newcolors[:int(256/4), :] = red newcmp = ListedColormap(newcolors) mock=\ np.array([[0.1,0.2,0.3], [0.2,0.3,0.4], [0.3,0.4,0.5], [0.4,0.5,0.6], [0.5,0.6,0.7], [0.6,0.7,0.8], [0.7,0.8,0.9]]) plt.figure(figsize=(6,6)) im = plt.imshow(mock,cmap = newcmp, vmin=0.0, vmax=1) plt.colorbar(im)