tiempo real matrices graficos graficas graficar grafica coordenadas barras python matplotlib

python - real - ¿Cómo extraer un subconjunto de un mapa de colores como un nuevo mapa de colores en matplotlib?



matplotlib python 3 (2)

Me gustaría utilizar un mapa de colores de matplotlib, por ejemplo, CMRmap. Pero no quiero usar el color "negro" al principio y el color "blanco" al final. Me interesa trazar mis datos usando los colores intermedios. Creo que las personas lo usan con bastante frecuencia, pero estaba buscando en Internet y no pude encontrar ninguna solución simple. Apreciaré si alguien sugiere alguna solución.


Recientemente estuve luchando con esto solo. Aquí hay algunas soluciones posibles:

Intente utilizar los argumentos de la palabra clave vmin , vmax en su función de trazado. Por ejemplo, supongamos que tiene datos entre 0 y 1, pero no le gustan los colores utilizados en los extremos del mapa de colores para 0 y 1.

import matplotlib.pyplot as plt import matplotlib.cm as cm my_cmap = cm.spectral_r my_cmap.set_over(''c'') my_cmap.set_under(''m'') plt.pcolor(data, vmin=0.01, vmax=0.99, cmap=my_cmap)

Esto forzará que todo el mapa de colores se use para valores entre 0.01 y 0.99 y los valores superiores e inferiores serán cian y magenta respectivamente. Es posible que esto no resuelva su problema exactamente, pero podría ser útil si le gusta un mapa de colores en particular y desea tener colores adicionales en ambos extremos.

Si realmente desea cambiar el mapa de colores, mire la documentación aquí y para LinearSegmentedColormap aquí .

Primero,

import matplotlib.cm as cm cdict = cm.get_cmap(''spectral_r'')._segmentdata

Esto devuelve un diccionario de todos los colores que componen el mapa de color. Sin embargo, es bastante complicado descubrir exactamente cómo alterar este diccionario. Este dict tiene tres teclas, red, green, blue . cdict[key] devuelve una lista de valores de la forma (x, y0, y1) . Echemos un vistazo a dos elementos consecutivos de cdict[''red''] :

((0.0, 0.0, 0.0) (0.5, 1.0, 1.0),...

Lo que esto significa es que los datos con z (suponiendo que estamos haciendo un pcolor o imshow ) entre 0.0 y 0.5 tendrán el componente rojo del color rgb asociado con esos datos aumentará de 0.0 (no rojo) a 1.0 (rojo máximo) . Esto significa que para cambiar el color del mapa de colores, debe examinar cómo se interpolan cada uno de los tres componentes de rgb en la región del mapa de colores que le interesa. Solo asegúrese de que para cada color, el primero y el último comienzo de entrada con x=0 y x=1 respectivamente; debe cubrir todo el espectro de [0, 1].

Si desea cambiar los colores de inicio y fin, intente

import matplotlib.cm as cm from matplotlib.colors import LinearSegmentedColormap cdict = cm.get_cmap(''spectral_r'')._segmentdata cdict[''red''][0] = (0, 0.5, 0.5) # x=0 for bottom color in colormap cdict[''blue''][0] = (0, 0.5, 0.5) # y=0.5 gray cdict[''green''][0] = (0, 0.5, 0.5) # y1=y for simple interpolation cdict[''red''][-1] = (1, 0.5, 0.5) # x=1 for top color in colormap cdict[''blue''][-1] = (1, 0.5, 0.5) cdict[''green''][-1] = (1, 0.5, 0.5) my_cmap = LinearSegmentedColormap(''name'', cdict)

Luego usa este cmap en tu función de trazado.

Lo que quería hacer era cambiar el gris al final del mapa de colores spectral_r por el blanco puro. Esto fue logrado usando

# Using imports from above cdict = matplotlib.cm.get_cmap(''spectral_r'')._segmentdata cdict[''red''][0] = (0, 1, 1) cdict[''green''][0] = (0, 1, 1) cdict[''blue''][0] = (0, 1, 1) my_cmap = LinearSegmentedColormap(''my_cmap'', cdict)


Los colores estáticos de color.LinearSegmentedColormap.from_list se pueden usar para crear nuevos LinearSegmentedColormaps. A continuación, muestro el mapa de colores original en 100 puntos entre 0.2 y 0.8:

cmap(np.linspace(0.2, 0.8, 100))

y usa estos colores para generar un nuevo mapa de color:

import matplotlib.pyplot as plt import matplotlib.colors as colors import numpy as np def truncate_colormap(cmap, minval=0.0, maxval=1.0, n=100): new_cmap = colors.LinearSegmentedColormap.from_list( ''trunc({n},{a:.2f},{b:.2f})''.format(n=cmap.name, a=minval, b=maxval), cmap(np.linspace(minval, maxval, n))) return new_cmap arr = np.linspace(0, 50, 100).reshape((10, 10)) fig, ax = plt.subplots(ncols=2) cmap = plt.get_cmap(''jet'') new_cmap = truncate_colormap(cmap, 0.2, 0.8) ax[0].imshow(arr, interpolation=''nearest'', cmap=cmap) ax[1].imshow(arr, interpolation=''nearest'', cmap=new_cmap) plt.show()

La gráfica de la izquierda muestra la imagen usando el mapa de color original (en este ejemplo, jet ). La gráfica de la derecha muestra la misma imagen usando new_cmap .