gpt4 book ai didi

python - 为什么 Seaborn 条形图会降低颜色的饱和度?

转载 作者:行者123 更新时间:2023-12-03 19:13:50 27 4
gpt4 key购买 nike

我正在尝试使用几个不同的库( bokehseabornmatlotlib )在 Python 中绘图,但保持相同的配色方案。我从 Bokeh 中选择了分类调色板:from bokeh.palettes import Category10 as palette然后也在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)
使用 matplotlib :
# 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()
Bokeh 条形图:
bokeh
matplotlib 条形图
matplotlib
seaborn 条形图:
seaborn

最佳答案

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

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns

source = pd.DataFrame({'names': ['exp_1', 'exp_2'], 'data':[3, 5]})
fig, ax = plt.subplots(1, 2)

# default saruration setting
sns.barplot(x="names", y="data", data=source, ax=ax[0])
ax[0].set_title('default saturation')

# additional parameter `saturation=1` passed to barplot
sns.barplot(x="names", y="data", data=source, saturation=1, ax=ax[1])
ax[1].set_title('saturation=1')
(这个答案直接来自@JohanC 的评论,我只是将它提升为一个答案......很高兴所有权归该用户所有。)

关于python - 为什么 Seaborn 条形图会降低颜色的饱和度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61272875/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com