Gostaria de saber como simplesmente reverter a ordem das cores de um determinado mapa de cores para usá-lo com plot_surface.
python
matplotlib
Mermoz
fonte
fonte
No matplotlib, um mapa de cores não é uma lista, mas contém a lista de suas cores como
colormap.colors
. E o módulomatplotlib.colors
fornece uma funçãoListedColormap()
para gerar um mapa de cores a partir de uma lista. Então você pode reverter qualquer mapa de cores fazendofonte
ListedColormap
s (ou seja, discretos, em vez de interpolados) têm umcolors
atributo. A reversãoLinearSegmentedColormaps
é um pouco mais complexa. (Você precisa de reverter todos os itens do_segmentdata
dict.)LinearSegmentedColormaps
, eu fiz isso em alguns mapas de cores. Aqui está um caderno IPython sobre isso.A solução é bem direta. Suponha que você queira usar o esquema de mapa de cores "outono". A versão padrão:
Para reverter o espectro de cores do mapa de cores, use a função get_cmap () e adicione '_r' ao título do mapa de cores da seguinte maneira:
fonte
Como a
LinearSegmentedColormaps
é baseado em um dicionário de vermelho, verde e azul, é necessário reverter cada item:Veja que funciona:
EDITAR
Não recebo o comentário de user3445587. Funciona bem no mapa de cores do arco-íris:
Mas funciona especialmente bem para mapas de cores declarados personalizados, pois não há um padrão
_r
para mapas de cores declarados personalizados. Exemplo a seguir, retirado de http://matplotlib.org/examples/pylab_examples/custom_cmap.html :fonte
A partir do Matplotlib 2.0, existe um
reversed()
método paraListedColormap
eLinearSegmentedColorMap
objetos, para que você possa fazercmap_reversed = cmap.reversed()
Aqui está a documentação.
fonte
Existem dois tipos de LinearSegmentedColormaps. Em alguns, os _segmentdata são dados explicitamente, por exemplo, para jet:
Para rainbow, _segmentdata é fornecido da seguinte maneira:
Podemos encontrar as funções na fonte do matplotlib, onde são dadas como
Tudo o que você deseja já está pronto no matplotlib, basta chamar cm.revcmap, que reverte os dois tipos de dados do segmento, portanto
deve fazer o trabalho - você pode simplesmente criar um novo LinearSegmentData a partir disso. No revcmap, a reversão de SegmentData baseada em função é feita com
enquanto as outras listas são invertidas como de costume
Então, na verdade, tudo o que você quer é
fonte
Ainda não existe uma maneira interna de reverter mapas de cores arbitrários, mas uma solução simples é realmente não modificar a barra de cores, mas criar um objeto Normalize invertido:
Você pode usá-lo com
plot_surface
e com outras funções de plotagem do Matplotlib, executandoIsso funcionará com qualquer mapa de cores Matplotlib.
fonte