为什么 seaborn countplots 和 histplots 显示相同的十六进制颜色不同?

Pau*_*ger 3 python hex colors matplotlib seaborn

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

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

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

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')
Run Code Online (Sandbox Code Playgroud)

它产生下图:

不同的蓝调

Joh*_*anC 5

所述countplot具有饱和度参数(更饱和更“实际”的色彩,饱和度少更接近灰色)。Seaborn 在条形图中使用饱和度使默认颜色看起来“更平滑”。默认饱和度为0.75; 它可以设置为1获得“真实”颜色。

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

要获得“真实”颜色,请将 thesaturationcountplot和 的alpha都设置histplot为 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()
Run Code Online (Sandbox Code Playgroud)

sns.histplot 和 sns.countplot 具有“全”颜色

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

  • Seaborn 具有去饱和功能,因此您可以使用:`sns.histplot(..., alpha=1, color=sns.desaturate('#5975a4', 0.75))`。另请参阅 [seaborn 的 barplot 文档](https://seaborn.pydata.org/generated/seaborn.barplot.html),其中注释 *“大块通常在颜色稍微不饱和的情况下看起来更好,但如果您想要绘图,请将其设置为 1颜色与输入颜色规格完美匹配。”* (2认同)