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

Why do seaborn countplots and histplots display the same hexadecimal color differently?

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

是否有我遗漏的设置,或者这些不同的图不只是显示给定的十六进制?我试过玩弄计数图饱和度,但它与颜色不匹配。理想情况下,我所有的 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')

产生下图:

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.

相同的宽度