为什么seaborncountplots和histplots显示相同的十六进制颜色不同?
我试图在我的论文中保留一个单一的调色板,我注意到我的 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')
它产生下图:
回答
所述countplot具有饱和度参数(更饱和更“实际”的色彩,饱和度少更接近灰色)。Seaborn 在条形图中使用饱和度使默认颜色看起来“更平滑”。默认饱和度为0.75; 它可以设置为1获得“真实”颜色。
该histplot有一个alpha参数,使得彩色半透明。颜色与背景混合,因此根据背景颜色看起来不同。在这种情况下,alpha似乎默认为0.75。由于这也具有类似于饱和度的效果,因此histplot不使用饱和度。当在同一个子图中绘制多个直方图时,透明度特别有用。
要获得“真实”颜色,请将 thesaturation的countplot和 的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()
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颜色与输入颜色规格完美匹配。”*
THE END
二维码