如何在seaborn中切换两个类别的颜色?

Sha*_*ang 3 python matplotlib pandas seaborn

假设我使用以下带有散点图的“iris”示例

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)
Run Code Online (Sandbox Code Playgroud)

输出以下图:

在此输入图像描述

但假设我想在 setosa 和 versicolor 之间切换颜色,使 setosa 绿色和 versicolor 蓝色,明确使用 seaborn 调色板。我会尝试这样的事情:

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'))
Run Code Online (Sandbox Code Playgroud)

当然,这是行不通的:

在此输入图像描述

调色板现已关闭。

(1) 如何切换两个类别并保持seaborn的调色板?

(2) 您想选择另一种seaborn“标准”颜色(例如青色)吗?如何将山楂从蓝色切换为青色?

Mer*_*lin 5

Seaborn 是开源的:这里列出了十六进制代码: 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 )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述