2016-07-11 10 views
0

Sagen wir, ich die folgende ‚Iris‘ Beispiel mit ScatterplotsWie man die Farben von zwei Kategorien im Seaborn wechselt?

import pandas as pd 
import seaborn as sns 
sns.set(style="whitegrid", palette="muted") 

# Load the example iris dataset 
iris = sns.load_dataset("iris") 

# "Melt" the dataset to "long-form" or "tidy" representation 
iris = pd.melt(iris, "species", var_name="measurement") 

# Draw a categorical scatterplot to show each observation 
sns.swarmplot(x="measurement", y="value", hue="species", data=iris) 

verwenden, die die folgenden Plot gibt:

enter image description here

Aber lassen Sie uns sagen, dass ich die Farben zwischen setosa und versicolor wechseln wollte, Setosa grün und versicolor blau, wobei explizit die Seaborn-Palette verwendet wird. Ich würde so etwas wie dies versuchen:

sns.set(style="whitegrid", palette="muted") 
iris = sns.load_dataset("iris") 
iris = pd.melt(iris, "species", var_name="measurement") 
sns.swarmplot(x="measurement", y="value", hue="species", data=iris, palette=dict(setosa = 'g', versicolor = 'b', virginica = 'r')) 

Natürlich ist dies nicht funktioniert:

enter image description here

Die Farbpalette jetzt ausgeschaltet ist.

(1) Wie wechseln Sie zwischen zwei Kategorien, die die Farbpalette von seaborn beibehalten?

(2) Was wollten Sie eine andere Seaborn "Standard" -Farbe, wie Cyan? Wie könnte ich Setosa von Blau auf Cyan umstellen?

+0

ich ein bisschen von Ihrer Frage verwirrt bin, da es wie Sie die Farben von zwei Kategorien eingeschaltet haben aussieht. – mwaskom

+0

@ Virginica ist das gleiche. Ich sollte das Original nehmen und "setosa" und "versicolor" mit der ursprünglichen Farbpalette von Seaborn wechseln. – ShanZhengYang

Antwort

2

Seaborn ist Open Source: Die Hexcodes sind hier aufgeführt: https://github.com/mwaskom/seaborn/blob/master/seaborn/palettes.py

SEABORN_PALETTES = dict(
    deep=["#4C72B0", "#55A868", "#C44E52", 
      "#8172B2", "#CCB974", "#64B5CD"], 
    muted=["#4878CF", "#6ACC65", "#D65F5F", 
      "#B47CC7", "#C4AD66", "#77BEDB"], 
    pastel=["#92C6FF", "#97F0AA", "#FF9F9A", 
      "#D0BBFF", "#FFFEA3", "#B0E0E6"], 
    bright=["#003FFF", "#03ED3A", "#E8000B", 
      "#8A2BE2", "#FFC400", "#00D7FF"], 
    dark=["#001C7F", "#017517", "#8C0900", 
      "#7600A1", "#B8860B", "#006374"], 
    colorblind=["#0072B2", "#009E73", "#D55E00", 
       "#CC79A7", "#F0E442", "#56B4E9"] 
    ) 


sns.set(style="whitegrid", palette="muted") 
iris  = sns.load_dataset("iris") 
iris  = pd.melt(iris, "species", var_name="measurement") 
muted = ["#4878CF", "#6ACC65", "#D65F5F", "#B47CC7", "#C4AD66", "#77BEDB"] 
newPal = dict(setosa = muted[0], versicolor = muted[2], virginica = muted[1]) 
sns.swarmplot(x="measurement", y="value", hue="species", data=iris,palette=newPal) 

enter image description here

+0

Es ist nicht ich, die Antworten abstimmen. Ich denke, das ist richtig. – ShanZhengYang

+0

Obwohl, könnten Sie die Handlung ausgeben und oben einfügen? Das würde die Post sicherlich verbessern. Vielen Dank! – ShanZhengYang

+0

Im Code wechseln Sie versicolor und viriginia, aber das ist in Ordnung. – ShanZhengYang