2017-06-02 218 views
2

为什么seaborn图表颜色与调色板指定的颜色不同?Seaborn图表颜色与调色板指定的颜色不同

以下两个图表显示了它们在条形图上显示时的颜色与它们在调色板图中出现的颜色之间的差异。你可以看看你是否仔细观察,条形图上的颜色稍微不明亮/饱和。

为什么这些不同,我怎样才能让条形图具有与调色板中指定的完全相同的颜色?

import seaborn as sns 
sns.set(style="white") 
titanic = sns.load_dataset("titanic") 

colors = ["windows blue", "amber", "greyish", "faded green", "dusty 
purple"] 

ax = sns.countplot(x="class", data=titanic, 
palette=sns.xkcd_palette(colors)) 
sns.palplot(sns.xkcd_palette(colors)) 

条形图
Bar chart

调色板情节
Palette plot

回答

2

许多seaborn绘图命令有一个说法saturation,其默认值为0.75。它将HSL颜色空间中颜色的饱和度(S)(范围从0到1)设置为给定值。

在countplot中将此参数设置为1将在两个图中给出相同的颜色。

ax = sns.countplot(x="class", data=titanic, palette=sns.xkcd_palette(colors), saturation=1) 
sns.palplot(sns.xkcd_palette(colors)) 

enter image description here

这样做的原因默认饱和度是很多人认为用较少的对比度情节更加吸引人。这也是为什么seaborn的默认背景不是白色,而是一些蓝灰色。毕竟,这当然是一种品味问题。

+1

正确的答案,虽然我不会说这是真的“最”,只是那些绘制大块补丁(如果他们不明亮,通常看起来更好)。 – mwaskom

+0

@mwaskom有没有办法将默认的饱和度设置为1?当使用'seaborn.apionly'时,这不受影响。而且似乎没有'sns.set(style =“white”,saturation = 1)''这样的东西。一般来说,我认为将风格固定到实际的绘图命令是一种糟糕的风格。 – ImportanceOfBeingErnest

+0

不,seaborn没有定义matplotlib没有的全局/默认值。 – mwaskom