2016-06-18 12 views
25

Seaborn bietet eine Funktion namens color_palette, mit der Sie einfach neue color_palettes für Plots erstellen können.seaborn color_palette als matplotlib colormap

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

color_palette = sns.color_palette(colors) 

Ich möchte color_palette zu einem cmap verwandeln, die ich in matplotlib verwenden kann, aber ich sehe nicht, wie ich das tun kann.

Leider funktionieren nur Funktionen wie "cubehelix_palette", "light_palette", ... mit einem "as_cmap" -Parameter. "color_palette" tut das leider nicht.

Antwort

20

Sie haben eine Liste von Farben von Seaborn Palette an Farbkarte von Matplotlib (thx to @RafaelLopes für vorgeschlagene Änderungen) zu konvertieren:

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

mich korrigieren, wenn ich falsch bin, aber dies wie eine Transformation eines Seaborn color_palette zu einem matplotlib cmap sieht nicht, das sieht aus wie eine alternative Lösung, wie man einen colormap mit matplotlib zu machen. Wenn ich sns.set_palette (flatui) aus Ihrem Code entfernen, ändert sich nichts. Trotzdem danke, dass Sie diese Matplotlib-Funktionalität gezeigt haben. – Corrumpo

+1

Dies ist die richtige Antwort in Bezug auf die Funktionalität, aber bitte verwenden Sie keine diskreten Farbgruppen, um kontinuierlich variierende Daten abzubilden, dies ist sehr irreführend. – mwaskom

+2

Basierend auf dieser Antwort @Corrumpo Code verwenden Sie 'cmap = ListedColormap (sns.color_palette(). As_hex())' – RafaelLopes

10

meist Seaborn Methoden Farbpaletten zu generieren ein optionales Argument as_cmap, das standardmäßig False ist.

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

Die erste Antwort ist irgendwie richtig, aber viel zu lange mit vielen unnötigen Informationen: Sie können direkt eine Matplotlib colormap bekommen verwenden. Die richtige und kurze Antwort lautet:

Um eine sns.color_palette() zu einem matplotlib kompatibel cmap konvertieren Sie müssen zwei Zeilen Code

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

Nur ein weiterer Tipp - wenn man eine kontinuierliche colorbar/colormap will, das Hinzufügen 256 als Die Anzahl der benötigten Farben von Seaborn colorscheme hilft sehr.

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