python - 如何在seaborn中删除顶部有箱线图的直方图中的间距?
问题描述
我正在遍历一个数据框并为我的数据中的每个数值参数构建一个顶部带有箱线图的直方图。目的是更好地理解数据集中的所有变量。下面的代码有效,但我的问题是它在直方图中的条形之间打印空格,我希望每个 bin 之间的空格为零。任何建议表示赞赏 - 谢谢!
for i in numerical_cols:
f, (ax_box, ax_hist) = plt.subplots(2, sharex=True, gridspec_kw={"height_ratios": (.15, .85)})
sns.distplot(raw[i], ax=ax_hist,kde=False)
sns.boxplot(raw[i], ax=ax_box)
ax_box.set(xlabel='')
sns.despine(ax=ax_hist)
sns.despine(ax=ax_box, left=True)
pdf.savefig()
plt.close()
pdf.close()
plt.cla()
print(" ")
print("Done Writing Frequency Visualizations!")
解决方案
您的数据似乎是离散的,只允许整数值。因此,标准直方图可能会令人困惑,因为它会创建大小相同的 bin,而这些 bin 与离散值不一致。在这种情况下,许多垃圾箱都是空的。(当您有例如 100 个值时,bin 将获得多个值,但由于四舍五入,某些 bin 会比其他 bin 获得更多值。)
应给出明确的 bin,例如在整数之间的一半处设置 bin 边界:
from matplotlib import pyplot as plt
import numpy as np
import seaborn as sns
p = np.random.rand(21) + 0.1
p /= p.sum()
raw_i = np.random.choice(range(21), size=1000000, p=p)
bins = np.arange( -0.5, raw_i.max()+1, 1)
fig, (ax_box, ax_hist) = plt.subplots(2, sharex=True, gridspec_kw={"height_ratios": (.15, .85)})
sns.distplot(raw_i, bins=bins, ax=ax_hist, kde=False)
sns.boxplot(raw_i, ax=ax_box)
ax_box.set(xlabel='')
sns.despine(ax=ax_hist)
sns.despine(ax=ax_box, left=True)
ax_box.set_yticks([])
plt.show()
推荐阅读
- sass - SCSS 在悬停时更改父 Z-Index
- javascript - Javascript 获取请求转义“/”
- javascript - 一个事件监听器循环元素VS单个元素上的事件监听器?
- javascript - Express js 4路由直接使用来自其他文件的函数指针返回404
- c++ - 在堆栈实现中使用这样的 C++ 指针是否危险?
- python - 捕获科学记数法并转换为字符串
- makefile - “make prefix”覆盖./configure --prefix 是否正确?
- r - 跨行折叠值
- c# - 用于在世界中放置对象时的光线投射抖动
- python - bzip2 支持的文件类型