【问题标题】:Why do seaborn countplots and histplots display the same hexadecimal color differently?为什么 seaborn 计数图和直方图显示相同的十六进制颜色不同?
【发布时间】:2021-10-10 16:31:18
【问题描述】:

我试图在我的论文中保留一个单一的调色板,我注意到我的 histplots 的蓝色和我的 countplots 的蓝色略有不同,即使我将它们设置为完全相同的十六进制值。

是否有我遗漏的设置,或者这些不同的图不只是显示给定的十六进制?我尝试过使用 countplot 饱和度,但它与颜色不匹配。理想情况下,我的所有直方图都与我的计数图具有相同的颜色(以及也使用计数图着色的条形图)。

下面是一个最小的代码示例:

import seaborn as sns
import matplotlib.pyplot as plt
sns.set(rc={'figure.figsize':(20,10)}, font_scale=2)
plt.rcParams['axes.grid'] = False
titanic = sns.load_dataset('titanic')
fig, ax = plt.subplots(1,2)
sns.countplot(x="class", data=titanic, ax=ax[0], color='#5975a4')
sns.histplot(x="who", data=titanic, ax=ax[1], color='#5975a4')

生成如下图:

【问题讨论】:

    标签: python matplotlib colors hex seaborn


    【解决方案1】:

    countplot 有一个饱和度参数(饱和度越高,颜色越“真实”,饱和度越低,越接近灰色)。 Seaborn 在条形图中使用饱和度来使默认颜色看起来“更平滑”。默认饱和度为0.75;它可以设置为1 以获得“真实”颜色。

    histplot 有一个 alpha 参数,使颜色半透明。颜色与背景混合,因此根据背景颜色看起来会有所不同。在这种情况下,alpha 似乎默认为0.75。由于这也具有类似于饱和的效果,histplot 不使用饱和度。当在同一个子图中绘制多个直方图时,透明度特别有用。

    要获得“真实”颜色,请将countplotsaturationhistplotalpha 都设置为1:

    import seaborn as sns
    import matplotlib.pyplot as plt
    
    sns.set(rc={'figure.figsize': (20, 10)}, font_scale=2)
    plt.rcParams['axes.grid'] = False
    titanic = sns.load_dataset('titanic')
    fig, ax = plt.subplots(1, 2)
    sns.countplot(x="class", data=titanic, ax=ax[0], color='#5975a4', saturation=1)
    sns.histplot(x="who", data=titanic, ax=ax[1], color='#5975a4', alpha=1)
    plt.show()
    

    PS:默认情况下,计数图仅使用 80% 的宽度,而直方图使用全宽。如果需要,可以缩小直方图条形,例如sns.histplot(..., shrink=0.8),获得与countplot相同的宽度。

    【讨论】:

    • 完美!谢谢。我在 countplot 文档中找到了饱和度参数,但找不到 histplot 的任何内容。我没有看它继承的类。你知道计算哪个 alpha 会匹配默认饱和度 0.75 的相同阴影的方法吗?
    • 透明度不会完全等于去饱和度。除此之外,最终的颜色将取决于背景。最好的解决方案是使用 alpha=1 对颜色值进行去饱和处理
    • 是的,我玩了一会儿,但透明度最终使它变亮(由于浅色背景),饱和度使它变暗,因此不可能达到默认的饱和度 0.75。最后我只是用 alpha = 饱和度 = 1 重新制作了我的所有图表。感谢您的帮助!
    • Seaborn 有去饱和功能,所以你可以使用:sns.histplot(..., alpha=1, color=sns.desaturate('#5975a4', 0.75))。另请参阅seaborn's barplot documentation,其中评论 “大色块通常在稍微不饱和的颜色下看起来更好,但如果您希望绘图颜色与输入颜色规范完美匹配,请将其设置为 1。”
    猜你喜欢
    • 2015-10-15
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多