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
- Visualizing distributions of data中包含的信息无法解决此问题。
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
1.忽略'sharex': False
,但'sharey'
可以工作
1.忽略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()
1.设置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
中地块数量的影响。 - 如果
displot
中有3个地块,则密度为histplot
中所示的1/3;对于2个小区,密度为1/2。
1条答案
按热度按时间lb3vh1jj1#
common_bins=False
将直方图变成相同的形状,解决了忽略bins
和sharex
的问题,并且分面图中的density
由每个分面中的数据点数量而不是分面数量来缩放。common_norm=False
解决了density
按displot
中的地块数拆分的问题Plot Code