distplot与kdeplot详解

单元分布 sns.distplot()

  • 直方图(hist)+内核密度函数(kde)

在seaborn中最简便查看单元分布的函数是distplot().该函数默认绘制直方图并拟合内核密度估计。通过调整参数可以分别绘制直方图,拟合内核密度图,地毯图等。

x = np.random.normal(size=100)
sns.distplot(x);
 
  • 直方图

sns.distplot(x,kde=False) / plt.hist()

当绘制直方图时,你需要调整的参数是bin的数目(组数)。displot()会默认给出一个它认为比较好的组数,但是尝试不同的组数可能会揭示出数据不同的特征。
sns.displot(x,bins=20,kde=False,rug=True)

 

当绘制直方图时,最重要的参数是bin以及vertical,以确定直方图的组数和放置位置
sns.distplot(x, bins=20, kde=False, rug=True);

 

  • 核密度估计

sns.distplot(x,hist=False) / sns.kdeplot(x)

核密度估计图使用的较少,但其是绘制出数据分布的有用工具,与直方图类似,KDE图以一个轴的高度为准,沿着另外的轴线编码观测密度。sns.displot(x,hist=False,rug=True)

绘制KDE图比绘制直方图要复杂得多,每个观测值首先要以该值为中心的正(高斯)曲线代替。然后各个点在加起来,计算支持网格点中每个点的密度值,然后将得到的曲线归一化,使其面积小于,即得到核密度估计图

在seaborng中也有一个函数kdeplot(),使用这个函数,我们可以得到同样的曲线,这个函数在distplot()中也被调用,但是他提供了更多更方便的借口,来进行可视化调整。
sns.kdeplot(x,shae=Ture)

参数bw(binwidth)同直方图的bin一样,控制了估算与数据间的紧密程度。与我们之前提到的内核宽度一致,默认情况下,函数会直接猜一个数据,但尝试更大或更小bw情况的,或许会更有帮助。
sns.kdeplot(x)
sns.kdeplot(x, bw=.2, label="bw: 0.2")
sns.kdeplot(x, bw=2, label="bw: 2")

使用cut参数,可以控制曲线绘制多远的极限值。然而这仅仅只是影响曲线如何绘制,并不会影响曲线本身

sns.kedplot(x,shade=True,cut=0)
sns.rugplot(x)
  • 拟合参数分布

sns.distplot(x,kde=False,fit=stats,gamma)

你也可以通过使用distplot()来拟合出一个数据集的参数分布,直观上来评估其余观测数据是否关系密切。

x = np.random.gamma(6, size=200)
sns.distplot(x, kde=False, fit=stats.gamma);
 
posted @ 2019-02-07 09:59  光彩照人  阅读(9514)  评论(0编辑  收藏  举报