Python 为什么Seaborn barplot会降低颜色的饱和度?

Python 为什么Seaborn barplot会降低颜色的饱和度?,python,matplotlib,plot,seaborn,palette,Python,Matplotlib,Plot,Seaborn,Palette,我试图使用几种不同的库(bokeh、seaborn和matlotlib)在Python中绘制绘图,但保持相同的配色方案。我选择了bokeh的Category pallete,带有: 从bokeh.paletes导入类别10作为调色板 然后也在seaborn和matplotlib中使用它。我的问题是,尽管在matplotlib中,颜色似乎与bokeh(如调色板中所定义)非常相似,seaborn显示出某种程度上明显的较暗颜色(即饱和或去饱和程度较低)。我想知道它是否在默认情况下对任何配色方案进行了某

我试图使用几种不同的库(
bokeh
seaborn
matlotlib
)在Python中绘制绘图,但保持相同的配色方案。我选择了bokeh的Category pallete,带有:
从bokeh.paletes导入类别10作为调色板

然后也在
seaborn
matplotlib
中使用它。我的问题是,尽管在
matplotlib
中,颜色似乎与
bokeh
(如调色板中所定义)非常相似,
seaborn
显示出某种程度上明显的较暗颜色(即饱和或去饱和程度较低)。我想知道它是否在默认情况下对任何配色方案进行了某种调暗,以及是否有任何方法可以避免这种情况。 下面是使用不同库制作相同条形图的代码
使用
bokeh

source = pd.DataFrame({'names': ['exp_1', 'exp_2'], 'data':[3, 5], 'color':palette[10][:2]})
p = bokeh.plotting.figure(x_range=['exp_1', 'exp_2'], y_range=(0,6), plot_height=500, title="test")
p.vbar(x='names', top='data', width=0.9,  legend_field="names", source=source, color='color')
p.xgrid.grid_line_color = None
p.legend.orientation = "horizontal"
p.legend.location = "top_center"
p.xaxis.major_label_text_font_size = '22pt'
p.yaxis.major_label_text_font_size = '22pt'
bokeh.io.show(p)
# same palette both for seaborn and matplotlib (taken from bokeh palette)
sns_palette=sns.color_palette(palette[10]) 
fig, ax = plt.subplots()
plt.style.use('seaborn')
ax.set_xlabel('experiment', fontsize=20)
ax.tick_params(axis='both', which='major', labelsize=22)
ax.set_xticks([0, 1])
ax.set_xticklabels(['exp_1', 'exp_2'], fontsize=18)
ax.bar([0, 1], source['data'], align='center', color=sns_palette[:2])
使用
matplotlib

source = pd.DataFrame({'names': ['exp_1', 'exp_2'], 'data':[3, 5], 'color':palette[10][:2]})
p = bokeh.plotting.figure(x_range=['exp_1', 'exp_2'], y_range=(0,6), plot_height=500, title="test")
p.vbar(x='names', top='data', width=0.9,  legend_field="names", source=source, color='color')
p.xgrid.grid_line_color = None
p.legend.orientation = "horizontal"
p.legend.location = "top_center"
p.xaxis.major_label_text_font_size = '22pt'
p.yaxis.major_label_text_font_size = '22pt'
bokeh.io.show(p)
# same palette both for seaborn and matplotlib (taken from bokeh palette)
sns_palette=sns.color_palette(palette[10]) 
fig, ax = plt.subplots()
plt.style.use('seaborn')
ax.set_xlabel('experiment', fontsize=20)
ax.tick_params(axis='both', which='major', labelsize=22)
ax.set_xticks([0, 1])
ax.set_xticklabels(['exp_1', 'exp_2'], fontsize=18)
ax.bar([0, 1], source['data'], align='center', color=sns_palette[:2])
并使用
bokeh

plt.figure()
ax = sns.barplot(x="names", y="data", data=source, palette=sns_palette[0:2])
ax.set_xlabel('experiment', fontsize=20)
ax.tick_params(axis='both', which='major', labelsize=18)
plt.tight_layout()
博克条形图:

matplotlib条形图

seaborn barplot:
默认情况下,将条面颜色的饱和度设置为0.75。可以通过向barplot调用添加
saturation=1
来覆盖此设置

将熊猫作为pd导入
从matplotlib导入pyplot作为plt
导入seaborn作为sns
source=pd.DataFrame({'names':['exp_1','exp_2'],'data':[3,5]})
图,ax=plt子批次(1,2)
#默认saruration设置
sns.barplot(x=“name”,y=“data”,data=source,ax=ax[0])
ax[0]。设置标题(“默认饱和度”)
#传递给条形图的附加参数“饱和度=1”
sns.barplot(x=“name”,y=“data”,data=source,saturation=1,ax=ax[1])
ax[1]。设置标题('saturation=1')

(这个答案与@JohanC的评论完全一致,我只是把它提升为一个答案……很高兴拥有这个用户。)

@JohanC似乎不是原因:我检查了,并且使用白色背景和显式alpha=1不会改变条形图的颜色:
sns.set_style('white');kwargs={'alpha':1};ax=sns。条形图(x=“name”,y=“data”,data=source,palete=sns\u palete[0:2],**kwargs)
有一个选项
饱和
,默认值为
0.75
。将其设置为
1
可避免所有饱和度:
sns.barplot(…,saturation=1)
(尽管如此,出于审美原因,文档建议进行一些去饱和度处理)。@JohanC是的,这是可行的!谢谢(有趣的是,默认情况下,“去饱和”选项似乎只存在于条形图和箱线图中,而不存在于线形图中)。如果你把你的评论作为一个答案,我可以接受。链接的文档解释说,建议对大面积区域进行去饱和,而不是管线。