控制seaborn的颜色顺序

时间:2018-02-03 19:29:01

标签: python matplotlib seaborn

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

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

1 个答案:

答案 0 :(得分:3)

首先,没有问题是将十六进制颜色字符串提供给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()

enter image description here

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

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

这将导致与上述相同的情节。

(请注意,seaborn默认会对颜色进行去饱和处理。因此,条形图的颜色与调色板中的颜色不完全相同;要更改此行为,需要在条形图调用中设置saturation=1。)