seaborn histplot 和 displot 输出不匹配
- 2025-04-15 09:20:00
- admin 原创
- 39
问题描述:
seaborn.histplot
和生成的直方图seaborn.displot
不匹配。默认绘图
sns.displot
为kind='hist'
已使用
python3.8.11
、seaborn 0.11.2
和 进行测试matplotlib 3.4.2
为什么输出不匹配?如何解决这个问题?
期望是,给定
bins
,density
相应图的应该匹配。bins
传递给numpy.histogram_bin_edges
可视化数据分布中包含的信息并不能解决问题。
import seaborn as sns
import matplotlib.pyplot as plt
# sample data: wide
dfw = sns.load_dataset("penguins", cache=False)[['bill_length_mm', 'bill_depth_mm']].dropna()
# sample data: long
dfl = dfw.melt(var_name='bill_size', value_name='vals')
seaborn.displot
忽略
'sharex': False
,但'sharey'
有效忽略
bins
fg = sns.displot(data=dfl, x='vals', col='bill_size', kde=True, stat='density', bins=12, height=4, facet_kws={'sharey': False, 'sharex': False})
plt.show()
设置
xlim
没有区别
fg = sns.displot(data=dfl, x='vals', col='bill_size', kde=True, stat='density', bins=12, height=4, facet_kws={'sharey': False, 'sharex': False})
axes = fg.axes.ravel()
axes[0].set_xlim(25, 65)
axes[1].set_xlim(13, 26)
plt.show()
seaborn.histplot
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4))
sns.histplot(data=dfw.bill_length_mm, kde=True, stat='density', bins=12, ax=ax1)
sns.histplot(data=dfw.bill_depth_mm, kde=True, stat='density', bins=12, ax=ax2)
fig.tight_layout()
plt.show()
更新
正如mwaskom所建议的,
common_bins=False
将直方图变成相同的形状,解决了忽略bins
和的问题sharex
。然而,density
似乎受到中图数量的影响displot
。如果 中有 3 个地块
displot
,则密度为 中所示的 1/3histplot
;对于 2 个地块,密度为 1/2。
解决方案 1:
正如mwaskom在评论中所建议的,
common_bins=False
将直方图变成相同的形状,解决了忽略bins
和的问题sharex
,并且density
刻面图中的是根据每个刻面中的数据点数而不是刻面数进行缩放的。通过使用以下方法解决了
density
按地块数量划分的问题displot
`common_norm=False`
剧情代码
# displot
fg = sns.displot(data=dfl, x='vals', col='bill_size', kde=True, stat='density', bins=12, height=4,
facet_kws={'sharey': False, 'sharex': False}, common_bins=False, common_norm=False)
fg.fig.subplots_adjust(top=0.85)
fg.fig.suptitle('Displot with common_bins & common_norm as False')
plt.show()
# histplot
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4))
sns.histplot(data=dfw.bill_length_mm, kde=True, stat='density', bins=12, ax=ax1)
sns.histplot(data=dfw.bill_depth_mm, kde=True, stat='density', bins=12, ax=ax2)
fig.subplots_adjust(top=0.85)
fig.suptitle('Histplot')
fig.tight_layout()
plt.show()
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD