seaborn histplot and displot output doesn#39;t match(海运HISPLOT和DISPLOT输出不匹配)
本文介绍了海运HISPLOT和DISPLOT输出不匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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。
- 如果
推荐答案
- 按照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()
这篇关于海运HISPLOT和DISPLOT输出不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:海运HISPLOT和DISPLOT输出不匹配
基础教程推荐
猜你喜欢
- matplotlib 设置 yaxis 标签大小 2022-01-01
- 比较两个文本文件以找出差异并将它们输出到新的文本文件 2022-01-01
- Kivy 使用 opencv.调整图像大小 2022-01-01
- 在 Django Admin 中使用内联 OneToOneField 2022-01-01
- 在 Python 中将货币解析为数字 2022-01-01
- 究竟什么是“容器"?在蟒蛇?(以及所有的 python 容器类型是什么?) 2022-01-01
- kivy 应用程序中的一个简单网页作为小部件 2022-01-01
- 对多索引数据帧的列进行排序 2022-01-01
- Python,确定字符串是否应转换为 Int 或 Float 2022-01-01
- Python 中是否有任何支持将长字符串转储为块文字或折叠块的 yaml 库? 2022-01-01
