Me gustaría saber cómo invertir simplemente el orden de color de un mapa de colores determinado para usarlo con plot_surface.
python
matplotlib
Mermoz
fuente
fuente
En matplotlib, un mapa de colores no es una lista, pero contiene la lista de sus colores como
colormap.colors
. Y el módulomatplotlib.colors
proporciona una funciónListedColormap()
para generar un mapa de color a partir de una lista. Para que pueda revertir cualquier mapa de color haciendofuente
ListedColormap
s (es decir, discreto, en lugar de interpolado) tienen uncolors
atributo. RevertirLinearSegmentedColormaps
es un poco más complejo. (Debe revertir cada elemento en el_segmentdata
dict.)LinearSegmentedColormaps
, acabo de hacer esto para algunos mapas de colores. Aquí hay un cuaderno de IPython al respecto.La solución es bastante sencilla. Supongamos que desea utilizar el esquema de mapa de colores "otoño". La versión estándar:
Para invertir el espectro de colores del mapa de colores, use la función get_cmap () y agregue '_r' al título del mapa de colores de esta manera:
fuente
Como
LinearSegmentedColormaps
se basa en un diccionario de rojo, verde y azul, es necesario revertir cada elemento:Ver que funciona:
EDITAR
No recibo el comentario del usuario3445587. Funciona bien en el mapa de colores del arco iris:
Pero funciona especialmente bien para mapas de color declarados personalizados, ya que no hay un valor predeterminado
_r
para mapas de color declarados personalizados. Siguiendo el ejemplo tomado de http://matplotlib.org/examples/pylab_examples/custom_cmap.html :fuente
A partir de Matplotlib 2.0, hay un
reversed()
método paraListedColormap
yLinearSegmentedColorMap
objetos, por lo que puede hacercmap_reversed = cmap.reversed()
Aquí está la documentación.
fuente
Hay dos tipos de LinearSegmentedColormaps. En algunos, los _segmentdata se dan explícitamente, por ejemplo, para jet:
Para rainbow, _segmentdata se da de la siguiente manera:
Podemos encontrar las funciones en la fuente de matplotlib, donde se dan como
Todo lo que desea ya está hecho en matplotlib, solo llame a cm.revcmap, que invierte ambos tipos de datos de segmento, por lo que
debería hacer el trabajo: simplemente puede crear un nuevo LinearSegmentData a partir de eso. En revcmap, la inversión de SegmentData basada en funciones se realiza con
mientras que las otras listas se invierten como de costumbre
Entonces, en realidad, todo lo que quieres es
fuente
No existe una forma integrada (todavía) de invertir mapas de colores arbitrarios, pero una solución simple es no modificar la barra de colores sino crear un objeto Normalizar invertido:
Luego puede usar esto con
plot_surface
y otras funciones de trazado de Matplotlib haciendo, por ejemplo,Esto funcionará con cualquier mapa de colores Matplotlib.
fuente