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.colorsproporciona una funciónListedColormap()para generar un mapa de color a partir de una lista. Para que pueda revertir cualquier mapa de color haciendofuente
ListedColormaps (es decir, discreto, en lugar de interpolado) tienen uncolorsatributo. RevertirLinearSegmentedColormapses un poco más complejo. (Debe revertir cada elemento en el_segmentdatadict.)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
LinearSegmentedColormapsse 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
_rpara 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 paraListedColormapyLinearSegmentedColorMapobjetos, 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_surfacey otras funciones de trazado de Matplotlib haciendo, por ejemplo,Esto funcionará con cualquier mapa de colores Matplotlib.
fuente