【问题标题】:Controlling color order in seaborn控制seaborn中的颜色顺序
【发布时间】:2018-02-04 04:44:02
【问题描述】:

当使用sns.barplot(myrange, means, pallette='deep') 之类的东西时,我会得到一些颜色顺序。我看到的默认顺序是蓝色、绿色、红色、紫色、棕色、蓝绿色。如果我有 6 个条,一切都很好,但是如果我想要 12 个条,并且我希望前两个条为蓝色,接下来的两个为绿色,接下来的两个为红色,依此类推,这样组的颜色相似?

我可以用color=myColors 传递一个列表,但这似乎不接受像#4C72B0 这样的html 颜色,所以我不知道如何获得我正在寻找的确切色调。

【问题讨论】:

  • 你能发布你尝试过的代码吗,最好是Minimal, Complete, and Verifiable example
  • @JustinasMarozas 指定自定义颜色图是控制颜色顺序的最简单方法?
  • @TheNightman 不知道这是否最简单。如果我知道所有分类值,我会使用它。您可能会欺骗 seaborn 使用另一个数据点或函数进行颜色映射。
  • 我认为链接的问题在这里并没有真正的帮助,因为它本质上与 OP 的要求相反。在这里,需要创建一个有用的颜色列表来提供给条形图,而链接的问题显示了如何从这样的列表开始创建一个 matplotlib 颜色图。

标签: python matplotlib seaborn


【解决方案1】:

首先,向 seaborn barplot 的 color 参数提供十六进制颜色字符串是没有问题的,例如

sns.barplot("A", "B", data=df, color="#4C72B0")

工作正常。但它将所有条形图着色为相同颜色。

因此您需要使用调色板。如果您想使用现有调色板的颜色,从该调色板开始并重复所需的次数可能会很有用。

col = np.repeat(np.array(sns.color_palette("deep")),2,axis=0)
sns.barplot(..., palette=col)

这里我们重复两次。完整示例:

import numpy as np
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

palette = np.repeat(np.array(sns.color_palette("deep")),2,axis=0)
n = 6
df = pd.DataFrame({"A":np.arange(n),
                   "B":np.random.rand(n)})
sns.barplot("A", "B", data=df, palette=palette)
plt.show()

如果您不想使用现有的调色板,您也可以使用自定义的十六进制颜色字符串列表来创建一个,

palette = sns.color_palette(["#4c72b0","#4c72b0","#55a868","#55a868","#c44e52","#c44e52"])

这将产生与上面相同的图。

(请注意,默认情况下,seaborn 会降低颜色的饱和度。因此,条形的颜色并不完全是调色板中的颜色;要更改此行为,需要在 barplot 调用中设置 saturation=1。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2012-06-08
    • 1970-01-01
    相关资源
    最近更新 更多