2022年 11月 4日

Python数据分析-绘图-2-Seaborn进阶绘图-3-分布图

一、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。
  1. iris=sns.load_dataset('iris')
  2. iris.head()
  3. >
  4. sepal_lengthsepal_width petal_length petal_width species
  5. 0 5.1 3.5 1.4 0.2 setosa
  6. 1 4.9 3.0 1.4 0.2 setosa
  7. 2 4.7 3.2 1.3 0.2 setosa
  8. 3 4.6 3.1 1.5 0.2 setosa
  9. 4 5.0 3.6 1.4 0.2 setosa
  10. fig,axes=plt.subplots(1,2,figsize=(8,4))
  11. #绘制单变量核密度图
  12. sns.kdeplot(iris['petal_length'],ax=axes[0],shade=True,color='y')
  13. #绘制双变量核密度图
  14. sns.kdeplot(iris['sepal_length'],iris['sepal_width'],ax=axes[1],shade=False,cbar=True)

 绘制两个阴影的双变量密度图:

  1. setosa=iris.loc[iris.species=='setosa']
  2. virginica=iris.loc[iris.species=='virginica']
  3. sns.kdeplot(setosa.sepal_width,setosa.sepal_length,cmap='Reds',shade=True)
  4. 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 接收绘图对象,选择在哪个图中绘制刻度。
  1. tips=sns.load_dataset('tips')
  2. sns.rugplot(tips.total_bill,height=0.08)

在核密度图上添加地毯图:

  1. sns.kdeplot(tips.total_bill)
  2. 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 接受字典,表示底层绘图函数的关键字参数。
  1. import pandas as pd
  2. from scipy.stats import norm
  3. import numpy as np
  4. np.random.seed(1)
  5. x=np.random.normal(size=100)
  6. pic=plt.figure(figsize=(8,8))
  7. data=pd.Series(x,name='data')#添加name属性
  8. #使用默认参数绘图
  9. pic.add_subplot(2,2,1)
  10. sns.distplot(data)
  11. #去除直方图,添加地毯图
  12. pic.add_subplot(2,2,2)
  13. sns.distplot(x,hist=False,rug=True)
  14. #正态拟合参数分布,改变整体颜色
  15. pic.add_subplot(2,2,3)
  16. sns.distplot(x,fit=norm,kde=False,color='y')
  17. #修改底层绘图函数参数
  18. pic.add_subplot(2,2,4)
  19. 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'})