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);