如何在seaborn中绘制离散变量的分布图

时间:2018-02-26 14:18:36

标签: python matplotlib seaborn probability-distribution

当我为离散变量绘制displot时,分布可能与我的想法不同。例如。

enter image description here 我们可以发现barplot中有裂缝,因此kdeplot中的曲线是"更低"在y轴上。

在我的工作中,情况更糟: enter image description here

我认为这可能是因为"宽度"或者"体重"每个酒吧都不是1。但我没有找到任何可以证明其合理性的参数。

我想绘制这样的曲线(它应该更平滑) enter image description here

2 个答案:

答案 0 :(得分:3)

解决此问题的一种方法可能是调整KDE的“带宽”(see the documentation for seaborn.kdeplot()

n = np.round(np.random.normal(5,2,size=(10000,)))
sns.distplot(n, kde_kws={'bw':1})

enter image description here

编辑以下是条形码和KDE的不同比例的替代方案

n = np.round(np.random.normal(5,2,size=(10000,)))
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

sns.distplot(n, kde=False, ax=ax1)
sns.distplot(n, hist=False, ax=ax2, kde_kws={'bw':1})

enter image description here

答案 1 :(得分:2)

如果问题是直方图中有一些空箱,那么指定与数据匹配的箱子可能是有意义的。在这种情况下,使用bins=np.arange(0,16)获取数据中所有整数的bin。

import numpy as np; np.random.seed(1)
import matplotlib.pyplot as plt
import seaborn as sns

n = np.random.randint(0,15,10000)
sns.distplot(n, bins=np.arange(0,16), hist_kws=dict(ec="k"))

plt.show()

enter image description here