2016-06-18 101 views
25

Seaborn offre una funzione chiamata color_palette, che consente di creare facilmente nuove color_palettes per i grafici.seaborn color_palette come colormap matplotlib

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

color_palette = sns.color_palette(colors) 

voglio trasformare color_palette ad una cmap, che posso utilizzare in matplotlib, ma non vedo come posso fare questo.

Purtroppo solo funzioni come "cubehelix_palette", "light_palette", ... hanno un parametro "as_cmap". "color_palette" non lo fa, sfortunatamente.

risposta

20

Dovete convertire un elenco di colori dalla tavolozza Seaborn alla mappa a colori di matplotlib (thx per @RafaelLopes per le modifiche proposte):

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

Correggetemi, se mi sbaglio, ma questo non sembra come una trasformazione di una color_palette Seaborn ad una cmap matplotlib, questo appare come una soluzione alternativa su come fare una colormap con matplotlib. Se rimuovo sns.set_palette (flatui) dal tuo codice non cambia nulla. Tuttavia grazie per aver mostrato questa funzionalità matplotlib. – Corrumpo

+1

Questa è la risposta corretta in termini di funzionalità, ma per favore non usare insiemi di colori discreti per mappare continuamente dati variabili, è molto fuorviante. – mwaskom

+2

Sulla base di questa risposta @Corrumpo usi il codice 'cmap = ListedColormap (sns.color_palette(). As_hex())' – RafaelLopes

10

metodi maggior Seaborn per generare tavolozze di colori hanno un argomento facoltativo as_cmap che per impostazione predefinita è False. È possibile utilizzare per ottenere direttamente una mappa di colori 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

La prima risposta è in qualche modo corretta ma troppo lungo, con un sacco di informazioni inutili. La risposta corretta e breve è:

per convertire qualsiasi sns.color_palette() ad un cmap compatibile matplotlib avete bisogno di due righe di codice

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

Solo un ulteriore suggerimento - se si vuole un continuo colorbar/mappa di colori, aggiungendo 256 come il numero di colori richiesti da Seaborn colorscheme aiuta molto.

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