一、kdeplot
核密度估计用来估计未知的密度函数,是非参数检验之一。直观上来看是平滑后的直方图。核密度估计方法不利用有关数据分布的先验知识,对数据分布不附加任何假定,是一种从数据样本本身出发研究数据分布特征的方法,因而,在统计学理论和应用领域均受到高度的重视。
函数:seaborn.kdeplot
常用参数:
data | array,用于绘制核密度图的数据 |
data2 | array,如果传入数据,将估计双变量核密度。 |
vertical |
bool,指定y轴还是x轴为密度。 |
kernal | “gau”“cos”“biw”“epa”“ri”“triw”,选择核函数。双变量只能使用“gau”高斯核密度 |
shade | bool,是否在kde曲线下着色。 |
gridsize | int,网格中离散点个数,默认为100. |
cumulative | bool,是否绘制累积分布,默认为False |
cbar | bool,是否添加颜色棒,默认为False。 |
- iris=sns.load_dataset('iris')
- iris.head()
- >
-
- sepal_lengthsepal_width petal_length petal_width species
- 0 5.1 3.5 1.4 0.2 setosa
- 1 4.9 3.0 1.4 0.2 setosa
- 2 4.7 3.2 1.3 0.2 setosa
- 3 4.6 3.1 1.5 0.2 setosa
- 4 5.0 3.6 1.4 0.2 setosa
-
- fig,axes=plt.subplots(1,2,figsize=(8,4))
- #绘制单变量核密度图
- sns.kdeplot(iris['petal_length'],ax=axes[0],shade=True,color='y')
- #绘制双变量核密度图
- sns.kdeplot(iris['sepal_length'],iris['sepal_width'],ax=axes[1],shade=False,cbar=True)
绘制两个阴影的双变量密度图:
- setosa=iris.loc[iris.species=='setosa']
- virginica=iris.loc[iris.species=='virginica']
- sns.kdeplot(setosa.sepal_width,setosa.sepal_length,cmap='Reds',shade=True)
- sns.kdeplot(virginica.sepal_width,virginica.sepal_length,cmap="Blues",shade=True)
二、rugplot
rugplot函数用来绘制地毯图,地毯图可以认为是数据刻度,用来辅助显示数据的分布特点。
函数:seaborn.rugplot
常用参数:
a | array,表示添加刻度的数据。 |
height | float,刻度的高度,默认为0.05. |
axis | 接收x或y,指定添加刻度的轴。 |
ax | 接收绘图对象,选择在哪个图中绘制刻度。 |
- tips=sns.load_dataset('tips')
- sns.rugplot(tips.total_bill,height=0.08)
在核密度图上添加地毯图:
- sns.kdeplot(tips.total_bill)
- sns.rugplot(tips.total_bill,height=0.08)
三、distplot
是hist函数的升级版,它集合了hist函数和kdeplot函数的功能,添加了rugplot分布观测条显示与利用scipy库拟合参数分布的新用途。
函数:seaborn.distplot
常用参数:
a | 接收series,list,array,表示观察数据,如果是具有name属性的series对象,则该名称将用于标记数据轴。 |
bin | int,表示长方形数目,默认为“auto” |
hist | bool,是否绘制直方图。默认为True |
kde | bool,是否绘制高斯核密度估计,默认为False |
rug | bool,是否添加地毯刻度,默认为False |
fit | 接收随机变量对象,用来拟合分布。 |
color | 表示除了拟合曲线外的所有内容的颜色。 |
{hist,kde,rug,fit}_kws | 接受字典,表示底层绘图函数的关键字参数。 |
- import pandas as pd
- from scipy.stats import norm
- import numpy as np
- np.random.seed(1)
- x=np.random.normal(size=100)
- pic=plt.figure(figsize=(8,8))
- data=pd.Series(x,name='data')#添加name属性
- #使用默认参数绘图
- pic.add_subplot(2,2,1)
- sns.distplot(data)
- #去除直方图,添加地毯图
- pic.add_subplot(2,2,2)
- sns.distplot(x,hist=False,rug=True)
- #正态拟合参数分布,改变整体颜色
- pic.add_subplot(2,2,3)
- sns.distplot(x,fit=norm,kde=False,color='y')
- #修改底层绘图函数参数
- pic.add_subplot(2,2,4)
- sns.distplot(x,rug=True,rug_kws={'color':"r"},kde_kws={'color':'k','lw':2,'label':'kde',"color":'b'},hist_kws={'histtype':'step','linewidth':2,'alpha':1,'color':'y'})