pythondistplot图_详解aborn可视化中的kdeplot、rugplot。
注册会计师考几年。。
⼀、aborn简介
aborn是Python中基于matplotlib的具有更多可视化功能和更优美绘图风格的绘图模块,当我们想要探索单个或⼀对数据分布上的特征时,可以使⽤到aborn中内置的若⼲函数对数据的分布进⾏多种多样的可视化。
本⽂以jupyter notebook为编辑⼯具,针对aborn中的kdeplot、rugplot、distplot和jointplot,对其参数设置和具体⽤法进⾏详细介绍。
⼆、kdeplot
aborn中的kdeplot可⽤于对单变量和双变量进⾏核密度估计并可视化,其主要参数如下:
data:⼀维数组,单变量时作为唯⼀的变量
data2:格式同data2,单变量时不输⼊,双变量作为第2个输⼊变量
shade:bool型变量,⽤于控制是否对核密度估计曲线下的⾯积进⾏⾊彩填充,True代表填充
vertical:bool型变量,在单变量输⼊时有效,⽤于控制是否颠倒x-y轴位置
kernel:字符型输⼊,⽤于控制核密度估计的⽅法,默认为'gau',即⾼斯核,特别地在2维变量的情况下仅⽀持⾼斯核⽅法
legend:bool型变量,⽤于控制是否在图像上添加图例
cumulative:bool型变量,⽤于控制是否绘制核密度估计的累计分布,默认为Fal
shade_lowest:bool型变量,⽤于控制是否为核密度估计中最低的范围着⾊,主要⽤于在同⼀个坐标轴中⽐较多个不同分布总体,默认为True
cbar:bool型变量,⽤于控制是否在绘制⼆维核密度估计图时在图像右侧边添加⽐⾊卡
吴忠景点color:字符型变量,⽤于控制核密度曲线⾊彩,同plt.plot()中的color参数,如'r'代表红⾊
吡喹酮cmap:字符型变量,⽤于控制核密度区域的递进⾊彩⽅案,同plt.plot()中的cmap参数,如'Blues'代表蓝⾊系
n_levels:int型,在⽽为变量时有效,⽤于控制核密度估计的区间个数,反映在图像上的闭环层数
下⾯我们来看⼏个⽰例来熟悉kdeplot中上述参数的实际使⽤⽅法:
⾸先我们需要准备数据,本⽂使⽤aborn中⾃带的鸢尾花数据作为⽰例数据,因为在jupyter notebook中运⾏代码,所以加上魔术命令%matplotlib inline使得图像得以在notebook中显⽰。
import aborn as sns
sns.t(color_codes=True)
import matplotlib.pyplot as plt
%matplotlib inline
#加载aborn⾃带的鸢尾花数据集,格式为数据框
iris = sns.load_datat('iris')
#分离出tosa类的花对应的属性值
tosa = iris.loc[iris.species == "tosa"].ret_index(drop=True)
#分离出virginica类的花对应的属性值
virginica = iris.loc[iris.species == "virginica"].ret_index(drop=True)⾸先我们不修改其他参数只传⼊数据来观察绘制出的图像:
#绘制iris中petal_width参数的核密度估计图
ax = sns.kdeplot(iris.petal_width)
加上红⾊填充颜⾊,并禁⽌图例显⽰:
ax = sns.kdeplot(iris.petal_width,shade=True,color='r')
修改为核密度分布:
ax = sns.kdeplot(iris.petal_width,
shade=True,
color='r',
cumulative=True)
交换x-y轴位置:
ax = sns.kdeplot(iris.petal_width,
shade=True,
color='r',
vertical=True)
下⾯我们来绘制双变量联合核密度估计图:
#绘制tosa花的petal_width与petal_length的联合核密度估计图
ax = sns.kdeplot(tosa.petal_width,
tosa.petal_length)
修改调⾊⽅案为蓝⾊,并设置shade_lowest=True:
ax = sns.kdeplot(tosa.petal_width,
tosa.petal_length,
cmap='Blues',
shade=True,
shade_lowest=True)
在上图基础上修改shade_lowest=Fal:
页加偏旁组成新字
ax = sns.kdeplot(tosa.petal_width,
tosa.petal_length,
cmap='Blues',
shade=True,
苹果手机分期shade_lowest=Fal)
可以看到这时最低密度估计曲线之外的区域没有被调⾊⽅案所浸染。
将核密度曲线区间个数修改为5:
ax = sns.kdeplot(tosa.petal_width,
tosa.petal_length,
cmap='Blues',
shade=True,
shade_lowest=Fal,
n_levels=5)
可以看到这时的核密度区间要粗略很多。
在同⼀个⼦图中绘制两个不同⼀维总体的核密度估计图,这⾥为了把它们区分开分别定义了label参数以显⽰在图例中:
ax1 = sns.kdeplot(tosa.petal_width,label='tosa.petal_width')
ax2 = sns.kdeplot(virginica.petal_width,label='virginica.petal_width')
在同⼀个⼦图中绘制两个不同⼆维总体的核密度估计图:
ax1 = sns.kdeplot(tosa.pal_width,tosa.pal_length,
cmap='Blues',
shade=True,
shade_lowest=Fal)
ax2 = sns.kdeplot(virginica.pal_width,virginica.pal_length,
cmap='Greens',
shade=True,
shade_lowest=Fal)
三、rugplot
rugplot的功能⾮常朴素,⽤于绘制出⼀维数组中数据点实际的分布位置情况,即不添加任何数学意义神气十足
上的拟合,单纯的将记录值在坐标轴上表现出来,相对于kdeplot,其可以展⽰原始的数据离散分布情况,其主要参数如下:
a:⼀维数组,传⼊观测值向量
height:设置每个观测点对应的⼩短条的⾼度,默认为0.05
axis:字符型变量,观测值对应⼩短条所在的轴,默认为'x',即x轴
使⽤默认参数进⾏绘制:
ax = sns.rugplot(iris.petal_length)龙和什么属相合
调换所处的坐标轴:
ax = sns.rugplot(iris.petal_length,axis='y')
修改⼩短条⾼度和颜⾊:
ax = sns.rugplot(iris.petal_length,
所以游目骋怀color='r',
height=0.2)
四、distplot
aborn中的distplot主要功能是绘制单变量的直⽅图,且还可以在直⽅图的基础上施加kdeplot和rugplot的部分内容,是⼀个功能⾮常强⼤且实⽤的函数,其主要参数如下:
a:⼀维数组形式,传⼊待分析的单个变量
bins:int型变量,⽤于确定直⽅图中显⽰直⽅的数量,默认为None,这时bins的具体个数由Freedman-Diaconis准则来确定
hist:bool型变量,控制是否绘制直⽅图,默认为True
kde:bool型变量,控制是否绘制核密度估计曲线,默认为True
rug:bool型变量,控制是否绘制对应rugplot的部分,默认为Fal
fit:传⼊scipy.stats中的分布类型,⽤于在观察变量上抽取相关统计特征来强⾏拟合指定的分布,下⽂的例⼦中会有具体说明,默认为None,即不进⾏拟合
hist_kws,kde_kws,rug_kws:这⼏个变量都接受字典形式的输⼊,键值对分别对应各⾃原⽣函数中的参数名称与参数值,在下⽂中会有⽰例
color:⽤于控制除了fit部分拟合出的曲线之外的所有对象的⾊彩
vertical:bool型,控制是否颠倒x-y轴,默认为Fal,即不颠倒
norm_hist:bool型变量,⽤于控制直⽅图⾼度代表的意义,为True直⽅图⾼度表⽰对应的密度,为Fal时代表的是对应的直⽅区间内记录值个数,默认为Fal
label:控制图像中的图例标签显⽰内容
使⽤默认参数进⾏绘制:
ax = sns.distplot(iris.petal_length)
修改所有对象的颜⾊,绘制rugplot部分,并修改bins为20:
ax = sns.distplot(iris.petal_length,color='r',
rug=True,
bins=20)
在上图的基础上强⾏拟合卡⽅分布并利⽤参数字典设置fit曲线为绿⾊:
from scipy.stats import chi2
ax = sns.distplot(iris.petal_length,color='r',
rug=True,
bins=20,
fit=chi2,
fit_kws={'color':'g'})
修改norm_hist参数为Fal使得纵轴显⽰的不再是密度⽽是频数(注意这⾥必须关闭kde和fit绘图的部分,否则纵轴依然显⽰密度),利⽤hist_kws传⼊字典调整直⽅图部分⾊彩和透明度,利⽤rug_kws传⼊字典调整rugplot部分⼩短条⾊彩:
ax = sns.distplot(iris.petal_length,color='r',
rug=True,
kde=Fal,
bins=20,
fit=None,
hist_kws={'alpha':0.6,'color':'orange'},
rug_kws={'color':'g'},
norm_hist=Fal)
五、jointplot
之所以按照kdeplot-rugplot-distplot的顺序来介绍是因为distplot中涉及到kdeplot与rugplot中的相关内容,⽽本⽂最后要介绍的函数jointplot中聚合了前⾯所涉及到的众多内容,⽤于对成对变量的相关情况、联合分布以及各⾃的分布在⼀张图上集中呈现,其主要参数如下:
x,y:代表待分析的成对变量,有两种模式,第⼀种模式:在参数data传⼊数据框时,x、y均传⼊字符
串,指代数据框中的变量名;第⼆种模式:在参数data为None时,x、y直接传⼊两个⼀维数组,不依赖数据框
data:与上⼀段中的说明相对应,代表数据框,默认为None
kind:字符型变量,⽤于控制展⽰成对变量相关情况的主图中的样式
color:控制图像中对象的⾊彩
height:控制图像为正⽅形时的边长
ratio:int型,调节联合图与边缘图的相对⽐例,越⼤则边缘图越矮,默认为5
space:int型,⽤于控制联合图与边缘图的空⽩⼤⼩
xlim,ylim:设置x轴与y轴显⽰范围
joint_kws,marginal_kws,annot_kws:传⼊参数字典来分别精细化控制每个组件
在默认参数设置下绘制成对变量联合图:
ax = sns.jointplot(x='pal_length',y='pal_width',data=tosa)
值得⼀提的是,jointplot还贴⼼的在图像上说明了成对变量之间的⽪尔逊简单相关系数以及相关性检验的p值结果。
将kind参数设置为'reg',为联合图添加线性回归拟合直线与核密度估计结果:
ax = sns.jointplot(x='pal_length',y='pal_width',data=tosa,
kind='reg')
修改kind为'hex'来为联合图⽣成六边形核密度估计:
ax = sns.jointplot(x='pal_length',y='pal_width',data=tosa,
kind='hex')
修改kind为'kde'来将直⽅图和散点图转换为核密度估计图,并将边际轴的留⽩⼤⼩设定为0: