2016-06-18 96 views
25

Seaborn oferuje funkcję o nazwie color_palette, która umożliwia łatwe tworzenie nowych palet kolorów dla działek.seaborn color_palette jako matplotlib colormap

colors = ["#67E568","#257F27","#08420D","#FFF000","#FFB62B","#E56124","#E53E30","#7F2353","#F911FF","#9F8CA6"] 

color_palette = sns.color_palette(colors) 

Chcę przekształcić color_palette do CMAP, które mogę wykorzystać w matplotlib, ale nie widzę w jaki sposób mogę to zrobić.

Niestety po prostu działa jak "kostka-kostka", "light_palette", ... mają parametr "as_cmap". "color_palette" niestety nie.

Odpowiedz

20

Trzeba przekonwertować listę kolorów z palety Seaborn na mapie barwy Matplotlib (thx do @RafaelLopes dla proponowanych zmian):

import seaborn as sns 
import matplotlib.pylab as plt 
import numpy as np 
from matplotlib.colors import ListedColormap 

# construct cmap 
flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"] 
my_cmap = ListedColormap(sns.color_palette(flatui).as_hex()) 

N = 500 
data1 = np.random.randn(N) 
data2 = np.random.randn(N) 
colors = np.linspace(0,1,N) 
plt.scatter(data1, data2, c=colors, cmap=my_cmap) 
plt.colorbar() 
plt.show() 

enter image description here

+2

Popraw mnie, jeśli się mylę, ale to nie wygląda jak przekształcenia Seaborn color_palette do CMAP matplotlib, to wygląda na to alternatywne rozwiązanie, w jaki sposób dokonać colormap z matplotlib. Jeśli usuniemy sns.set_palette (flatui) z Twojego kodu nic się nie zmieni. Niemniej jednak dziękuję za wyświetlenie tej funkcjonalności matplotlib. – Corrumpo

+1

To jest poprawna odpowiedź pod względem funkcjonalności, ale proszę nie używać dyskretnych zestawów kolorów do mapowania ciągle zmieniających się danych, jest to bardzo mylące. – mwaskom

+2

Na podstawie tej odpowiedzi @Corrumpo możesz użyć kodu 'cmap = ListedColormap (sns.color_palette(). As_hex())' – RafaelLopes

10

metod Większość Seaborn wygenerować palety kolorów mają opcjonalny argument as_cmap, który domyślnie jest False. Można użyć bezpośrednio dostać colormap matplotlib:

import seaborn as sns 
import matplotlib.pylab as plt 
import numpy as np 

# construct cmap 
my_cmap = sns.light_palette("Navy", as_cmap=True) 

N = 500 
data1 = np.random.randn(N) 
data2 = np.random.randn(N) 
colors = np.linspace(0,1,N) 
plt.scatter(data1, data2, c=colors, cmap=my_cmap) 
plt.colorbar() 
plt.show() 

enter image description here

6

Pierwsza odpowiedź jest poprawna, ale jakoś zbyt długo z wielu niepotrzebnych informacji. Prawidłowe i krótka odpowiedź brzmi:

Aby przekonwertować dowolny sns.color_palette() do kompatybilnego CMAP matplotlib potrzebne są dwie linie kodu

from matplotlib.colors import ListedColormap 
cmap = ListedColormap(sns.color_palette()) 
4

Wystarczy dodatkowa wskazówka - jeśli ktoś chce ciągłą colorbar/colormap, dodając 256 jako liczba kolorów wymaganych od Seaborn colorscheme bardzo pomaga.

cmap = ListedColormap(sns.color_palette("Spectral",256))