【发布时间】:2021-10-22 04:57:32
【问题描述】:
-
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
- 忽略
'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中的地块数量的影响。- 如果
displot中有3个地块,那么密度是histplot中显示的1/3;对于 2 个地块,密度为 1/2。
- 如果
【问题讨论】:
标签: python-3.x numpy matplotlib seaborn histogram