目录
Seaborn 在 Matplotlib 的基础上进行了更加高级的封装,用户能够使用极少的代码绘制出拥有丰富统计信息的科研论文配图,使用难度相比之下更低。
安装
官方文档:https://seaborn.pydata.org/tutorial.htm]
# 两种方式均可进行安装
# pip install seaborn
# conda install seaborn
绘图类型函数详解
关系绘图
数据集变量间的相互关系和相互依赖的程度都可以通过统计分析变量间的相关性获知。在这一过程中,合理的可视化表示可以帮助读者更好地理解数据和发掘数据间的内在联系。Seaborn提供的scatterplot()、relplot()和lineplot()函数可用于绘制反映数据间关系的图。
数据分布型图
在对数据进行分析或建模之前,我们需要先了解数据的分布情况,以及数据的覆盖范围、 中心趋势、异常值等基本情况。Seaborn 提供的多个绘图函数可用于可视化数据的分布情况。
分类数据型图
在面对数据组中具有离散型变量(分类变量)的情况时,我们可使用以 X 轴或 Y 轴作为 分类轴的绘图函数来绘制分类数据型图。
回归模型分析型图
我们可以使用回归模型分析型图表示数据集中变量间的关系,使用统计模型来估计两组变量间的关系。
关系绘图
基础实现
import seaborn as sns
tips = sns.load_dataset("tips",cache=True) # 载入数据集
sns.relplot(x="total_bill",y="tip",data=tips)
查看数据集分布:
加入hue参数
hue参数可以用来控制第三个变量的颜色显示,即:
sns.relplot(x="total_bill",y="tip",hue="day",data=tips)
添加col和row参数
col与row可以将所绘制的图像根据某个属性的值的个数分割成相应的列或行,比如在tips数据集中,可以按照col = 'sex' 划分为Male 与 Female。
sns.relplot(x="total_bill",y="tip",hue="day",col="sex",data=tips)
当然也可以通过设置row = 'time'获取其余图像,此处不作进一步展示。
分类绘图
swarmplot
sns.catplot(x="day",y="total_bill",kind="swarm",data=tips,hue="sex")
小提琴图
小提琴图通常沿着水平轴展示不同的类别或分组,而竖直轴表示数据的取值范围。每个小提琴图由一个核密度估计图和两条连线组成,连线部分表示数据的分布范围,核密度估计图则显示数据的分布密度。小提琴图的形状可以帮助观察者判断数据的集中趋势、离散程度和偏斜程度。
sns.catplot(x="day",y="total_bill",data=tips,kind="violin",hue="time",split=True)
分布绘图
单变量分布
单变量分布可以使用直方图进行表示,具体使用distplot。
import numpy as np
sns.set(color_codes=True)
titanic = sns.load_dataset("titanic")
titanic = titanic[~np.isnan(titanic['age'])]
sns.distplot(titanic['age'])
多变量分布
对于多变量分布,我们往往是选择考察彼此之间的相关性,这个时候我们可以使用pairplot,将某个数据集中不同变量之间的俄关系图一次性绘制出来。
iris = sns.load_dataset("iris")
sns.pairplot(iris,vars=['sepal_length',"sepal_width",'petal_length','petal_width'])
从中我们可以发现如length与width保持较强的正相关关系,这也与我们的直观认识一致。为进一步探索,此处还可以通过调整参数 diag_kind 与 kind 获取更加直观的图像。
sns.pairplot(iris,vars=['sepal_length',"sepal_width",'petal_length','petal_width'],diag_kind="kde",kind="reg")
FacetGrid绘图
基本实现
创建一个 FacetGrid 对象,然后调用 map 方法。其中 map 方法的第一个参数是一个函数,后续 map 将调用这个函数来绘制图像,而后面的参数是传递给这个函数的参数。
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips)
g.map(plt.scatter,"total_bill","tip")
特别地,常用的一些绘图函数也集成于 FacetGrid 之中:
绘制多个图形
根据上文所讲解的超参数,即可使用FacetGrid进行实现:
g = sns.FacetGrid(tips,col="day",col_wrap=2)
g.map(sns.regplot,"total_bill","tip")
也可以通过调整 hue 参数,来更好地进行可视化:
g = sns.FacetGrid(tips,col="day",hue="time", col_wrap=2)
g.map(sns.regplot,"total_bill","tip")
总结
本次基于Python的第三方库Seaborn探究了科研配图的相关细节,宏观上讲解了从安装到绘图类型的简要知识,微观上分别以关系绘图、分类绘图、分布绘图以及FacetGrid绘图为例进行了动手实践,进一步加深了对Seaborn的理解,领悟到了使用Seaborn作图的小技巧。