Ich möchte wissen, wie man einfach die Farbreihenfolge einer bestimmten Farbkarte umkehrt, um sie mit plot_surface zu verwenden.
python
matplotlib
Mermoz
quelle
quelle
In matplotlib ist eine Farbkarte keine Liste, sondern enthält die Liste ihrer Farben als
colormap.colors
. Das Modulmatplotlib.colors
bietet eine FunktionListedColormap()
zum Generieren einer Farbkarte aus einer Liste. Sie können also jede Farbkarte umkehren, indem Sie dies tunquelle
ListedColormap
s (dh diskret und nicht interpoliert) haben eincolors
Attribut. Das UmkehrenLinearSegmentedColormaps
ist etwas komplexer. (Sie müssen jeden Punkt im_segmentdata
Diktat umkehren .)LinearSegmentedColormaps
ich dies nur für einige Farbkarten getan. Hier ist ein IPython-Notizbuch darüber.Die Lösung ist ziemlich einfach. Angenommen, Sie möchten das Farbkartenschema "Herbst" verwenden. Die Standardversion:
Um das Farbspektrum der Farbkarte umzukehren, verwenden Sie die Funktion get_cmap () und hängen Sie '_r' wie folgt an den Titel der Farbkarte an:
quelle
Da a
LinearSegmentedColormaps
auf einem Wörterbuch aus Rot, Grün und Blau basiert, muss jedes Element umgekehrt werden:Sehen Sie, dass es funktioniert:
BEARBEITEN
Ich bekomme den Kommentar von user3445587 nicht. Es funktioniert gut auf der Regenbogen-Farbkarte:
Es funktioniert jedoch besonders gut für benutzerdefinierte deklarierte Farbkarten, da es keine Standardeinstellung
_r
für benutzerdefinierte deklarierte Farbkarten gibt. Das folgende Beispiel stammt von http://matplotlib.org/examples/pylab_examples/custom_cmap.html :quelle
Ab Matplotlib 2.0 gibt es eine
reversed()
Methode fürListedColormap
undLinearSegmentedColorMap
Objekte, sodass Sie dies einfach tun könnencmap_reversed = cmap.reversed()
Hier ist die Dokumentation.
quelle
Es gibt zwei Arten von LinearSegmentedColormaps. In einigen Fällen werden die _segmentdata explizit angegeben, z. B. für jet:
Für den Regenbogen werden _segmentdata wie folgt angegeben:
Wir können die Funktionen in der Quelle von matplotlib finden, wo sie als angegeben sind
Alles, was Sie wollen, ist bereits in matplotlib erledigt. Rufen Sie einfach cm.revcmap auf, wodurch beide Arten von Segmentdaten umgekehrt werden
sollte den Job machen - Sie können einfach ein neues LinearSegmentData daraus erstellen. In revcmap erfolgt die Umkehrung funktionsbasierter SegmentData mit
während die anderen Listen wie gewohnt umgekehrt werden
Also eigentlich ist das Ganze was du willst
quelle
Es gibt (noch) keine integrierte Möglichkeit, beliebige Farbkarten umzukehren, aber eine einfache Lösung besteht darin, die Farbleiste nicht zu ändern, sondern ein invertierendes Normalisierungsobjekt zu erstellen:
Sie können dies dann mit
plot_surface
und anderen Matplotlib-Plotfunktionen verwenden, indem Sie zDies funktioniert mit jeder Matplotlib-Farbkarte.
quelle