【问题标题】:How to switch the colors of two categories in seaborn?seaborn中如何切换两个类别的颜色?
【发布时间】:2016-07-11 21:04:23
【问题描述】:

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

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) 你想选择另一种海洋“标准”颜色,比如青色?我怎样才能将 setosa 从蓝色切换到青色?

【问题讨论】:

  • 我对你的问题有点困惑,因为看起来你已经切换了两个类别的颜色。
  • @Virginica 是一样的。我是拿原来的,用seaborn的原始调色板切换“setosa”和“versicolor”。

标签: python pandas matplotlib seaborn


【解决方案1】:

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 )

【讨论】:

  • 不是我否决了答案。我认为这是正确的。
  • 不过,您可以输出绘图并粘贴到上面吗?那肯定会改善职位。谢谢!
  • 在代码中,您正在切换 versicolor 和 viriginia,但这很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 2020-09-14
  • 2021-02-09
  • 1970-01-01
  • 2018-12-15
  • 2018-05-07
  • 1970-01-01
相关资源
最近更新 更多