Je voudrais savoir comment inverser simplement l'ordre des couleurs d'une palette de couleurs donnée afin de l'utiliser avec plot_surface.
python
matplotlib
Mermoz
la source
la source
Dans matplotlib, une carte de couleurs n'est pas une liste, mais elle contient la liste de ses couleurs en tant que
colormap.colors
. Et le modulematplotlib.colors
fournit une fonctionListedColormap()
pour générer une carte de couleurs à partir d'une liste. Vous pouvez donc inverser n'importe quelle carte de couleur en faisantla source
ListedColormap
s (c'est-à-dire discrets, plutôt qu'interpolés) ont uncolors
attribut. L'inversionLinearSegmentedColormaps
est un peu plus complexe. (Vous devez inverser chaque élément du_segmentdata
dicton.)LinearSegmentedColormaps
, je viens de le faire pour certaines cartes de couleurs. Voici un bloc-notes IPython à ce sujet.La solution est assez simple. Supposons que vous souhaitiez utiliser le schéma de couleurs "automne". La version standard:
Pour inverser le spectre de couleurs de la palette de couleurs, utilisez la fonction get_cmap () et ajoutez «_r» au titre de la palette de couleurs comme ceci:
la source
Comme un
LinearSegmentedColormaps
est basé sur un dictionnaire de rouge, vert et bleu, il est nécessaire d'inverser chaque élément:Assurez-vous que cela fonctionne:
ÉDITER
Je ne reçois pas le commentaire de user3445587. Cela fonctionne bien sur la palette de couleurs arc-en-ciel:
Mais cela fonctionne particulièrement bien pour les cartes de couleurs déclarées personnalisées, car il n'y a pas de valeur
_r
par défaut pour les cartes de couleurs déclarées personnalisées. Exemple suivant tiré de http://matplotlib.org/examples/pylab_examples/custom_cmap.html :la source
Depuis Matplotlib 2.0, il existe une
reversed()
méthode pourListedColormap
et desLinearSegmentedColorMap
objets, vous pouvez donc simplement fairecmap_reversed = cmap.reversed()
Voici la documentation.
la source
Il existe deux types de LinearSegmentedColormaps. Dans certains, les _segmentdata sont donnés explicitement, par exemple, pour jet:
Pour arc-en-ciel, _segmentdata est donné comme suit:
Nous pouvons trouver les fonctions dans la source de matplotlib, où elles sont données comme
Tout ce que vous voulez est déjà fait dans matplotlib, appelez simplement cm.revcmap, qui inverse les deux types de données de segment, donc
devrait faire le travail - vous pouvez simplement créer un nouveau LinearSegmentData à partir de cela. Dans revcmap, l'inversion de SegmentData basée sur une fonction se fait avec
tandis que les autres listes sont inversées comme d'habitude
Donc en fait, tout ce que vous voulez, c'est
la source
Il n'y a pas (encore) de méthode intégrée pour inverser les palettes de couleurs arbitraires, mais une solution simple consiste en fait à ne pas modifier la barre de couleurs mais à créer un objet Normalize inverseur:
Vous pouvez ensuite l'utiliser avec d'
plot_surface
autres fonctions de traçage de Matplotlib en faisant par exempleCela fonctionnera avec n'importe quelle palette de couleurs Matplotlib.
la source