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

How to switch the colors of two categories in 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)

输出以下图:

但是假设我想在 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'))

当然,这行不通:

调色板现已关闭。

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

(2) 你想选择另一种 seaborn "standard" 颜色,比如青色?我怎样才能将 setosa 从蓝色切换为青色?

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 )