Chciałbym wiedzieć, jak po prostu odwrócić kolejność kolorów danej mapy kolorów, aby używać jej z powierzchnią plot_surface.
python
matplotlib
Mermoz
źródło
źródło
W matplotlib mapa kolorów nie jest listą, ale zawiera listę jej kolorów jako
colormap.colors
. Modułmatplotlib.colors
zapewnia funkcjęListedColormap()
generowania mapy kolorów z listy. Dzięki temu możesz odwrócić dowolną mapę kolorówźródło
ListedColormap
s (tzn. Dyskretne, a nie interpolowane) mającolors
atrybut. CofanieLinearSegmentedColormaps
jest nieco bardziej skomplikowane. (Musisz odwrócić każdy element w_segmentdata
nagraniu.)LinearSegmentedColormaps
, właśnie to zrobiłem dla niektórych map kolorów. Oto o tym notatnik IPython.Rozwiązanie jest dość proste. Załóżmy, że chcesz użyć schematu kolorów „jesiennych”. Wersja standardowa:
Aby odwrócić spektrum kolorów mapy kolorów, użyj funkcji get_cmap () i dodaj „_r” do tytułu mapy kolorów w następujący sposób:
źródło
Ponieważ a
LinearSegmentedColormaps
jest oparte na słowniku czerwieni, zieleni i niebieskiego, konieczne jest odwrócenie każdego elementu:Sprawdź, czy to działa:
EDYTOWAĆ
Nie otrzymuję komentarza użytkownika 3445587. Działa dobrze na tęczowej colormap:
Ale działa to szczególnie dobrze w przypadku niestandardowych deklarowanych map kolorów, ponieważ nie ma wartości domyślnej
_r
dla niestandardowych deklarowanych map kolorów. Poniższy przykład pochodzi z http://matplotlib.org/examples/pylab_examples/custom_cmap.html :źródło
Od Matplotlib 2.0 istnieje
reversed()
metodaListedColormap
iLinearSegmentedColorMap
obiekty, więc możesz to zrobićcmap_reversed = cmap.reversed()
Oto dokumentacja.
źródło
Istnieją dwa rodzaje LinearSegmentedColormaps. W niektórych przypadkach dane _segment są podane jawnie, np. Dla jet:
W przypadku tęczy _segmentdata podano w następujący sposób:
Możemy znaleźć funkcje w źródle matplotlib, gdzie podano je jako
Wszystko, czego chcesz, jest już zrobione w matplotlib, wystarczy wywołać cm.revcmap, który odwraca oba typy danych segmentu, więc
powinien wykonać zadanie - możesz po prostu utworzyć nowy LinearSegmentData z tego. W revcmap następuje odwrócenie danych segmentowych opartych na funkcjach
podczas gdy inne listy są odwracane jak zwykle
Więc właściwie to wszystko, czego chcesz, to
źródło
Nie ma (jeszcze) wbudowanego sposobu odwracania dowolnych mapowań kolorów, ale jednym prostym rozwiązaniem jest nie modyfikowanie paska kolorów, ale utworzenie odwracalnego obiektu Normalizuj:
Następnie możesz użyć tego z
plot_surface
innymi funkcjami drukowania Matplotlib, wykonując npBędzie to działać z każdą mapą kolorów Matplotlib.
źródło