python数据科学系列:seaborn入门详细教程
导读
前期,分别对python数据分析三剑客进行了逐一详细入门介绍,今天推出系列第4篇教程:seaborn。这是一个基于matplotlib进行高级封装的可视化库,相比之下,绘制图表更为集成化、绘图风格具有更高的定制性。
教程目录
绘图接口更为集成,可通过少量参数设置实现大量封装绘图 多数图表具有统计学含义,例如分布、关系、统计、回归等 对Pandas和Numpy数据类型支持非常友好 风格设置更为多样,例如风格、绘图环境和颜色配置等
正是由于seaborn的这些特点,在进行EDA(Exploratory Data Analysis, 探索性数据分析)过程中,seaborn往往更为高效。然而也需指出,seaborn与matplotlib的关系是互为补充而非替代:多数场合中seaborn是绘图首选,而在某些特定场景下则仍需用matplotlib进行更为细致的个性化定制。
按照惯例,后文将seaborn简写为sns。 至于seaborn简写为sns而非sbn的原因,感兴趣者可自行查阅(关键词:why import seaborn as sns?)。
seaborn的风格设置主要分为两类,其一是风格(style)设置,其二是环境(context)设置。
1. 风格设置
seaborn设置风格的方法主要有三种:
set,通用设置接口
set_style,风格专用设置接口,设置后全局风格随之改变
axes_style,设置当前图(axes级)的风格,同时返回设置后的风格系列参数,支持with关键字用法
当前支持的风格主要有5种:
darkgrid,默认风格
whitegrid
dark
white
ticks
seaborn 5种内置风格与matplotlib绘图风格对比
相比matplotlib绘图风格,seaborn绘制的直方图会自动增加空白间隔,图像更为清爽。而不同seaborn风格间,则主要是绘图背景色的差异。
2. 环境设置
设置环境的方法也有3种:
set,通用设置接口
set_context,环境设置专用接口,设置后全局绘图环境随之改变
plotting_context,设置当前图(axes级)的绘图环境,同时返回设置后的环境系列参数,支持with关键字用法
当前支持的绘图环境主要有4种:
notebook,默认环境
paper
talk
poster
seaborn 4种绘图环境对比
点击查看大图
seaborn风格多变的另一大特色就是支持个性化的颜色配置。颜色配置的方法有多种,常用方法包括以下两个:
color_palette,基于RGB原理设置颜色的接口,可接收一个调色板对象作为参数,同时可以设置颜色数量
hls_palette,基于Hue(色相)、Luminance(亮度)、Saturation(饱和度)原理设置颜色的接口,除了颜色数量参数外,另外3个重要参数即是hls
hls_palette提供了均匀过渡的8种颜色样例
而color_palette则只是提供了8种不同颜色
seaborn自带了一些经典的数据集,用于基本的绘制图表示例数据。在联网状态下,可通过load_dataset()接口进行获取,首次下载后后续即可通过缓存加载。返回数据集格式为Pandas.DataFrame对象。
当前内置了10几个数据集,常用的经典数据集如下:
iris:鸢尾花,与sklearn中数据集一致,仅有数值型数据
tips:小费,主要是中餐和晚餐的数据集,既有分类数据也有数值数据,可用于探索数据间的回归关系
titanic:泰坦尼克,经典数据集
本文后续所有绘图主要基于前2个数据集完成。
seaborn内置了大量集成绘图接口,往往仅需一行代码即可实现美观的图表结果。按照数据类型,大体可分为连续性(数值变量)和离散型(分类数据)两类接口。
数值变量
1. 单变量分布
变量分布可用于表达一组数值的分布趋势,包括集中程度、离散程度等。seaborn中提供了3种表达单变量分布的绘图接口
distplot
distribution+plot,接口内置了直方图(histogram)、核密度估计图(kde,kernel density estimation)以及rug图(直译为地毯,绘图方式就是将数值出现的位置原原本本的以小柱状的方式添加在图表底部),3种图表均可通过相应参数设置开关状态,默认情况下是绘制hist+kde。
kdeplot
kdeplot是一个专门绘制核密度估计图的接口,虽然distplot中内置了kdeplot图表,并且可通过仅开启kde开关实现kdeplot的功能,但kdeplot实际上支持更为丰富的功能,比如当传入2个变量时绘制的即为热力图效果。
rugplot
2. 多变量分布
单变量分布仅可用于观察单一维度的变化关系,为了探究多变量间分布关系时,如下绘图接口更为有效:
jointplot
pairplot
实际上,查看seaborn源码可以发现,其绘图接口大多依赖于一个类实现。例如:jointplot在seaborn中实际上先实现了一个名为JointGrid的类,然后在调用jointplot时即是调用该类实现。相比之下,JointGrid可以实现更为丰富的可定制绘图接口,而jointplot则是其一个简单的样例实现。类似地,pairplot则是依赖于PairGrid类实现。
与此同时,seaborn中的绘图接口虽然大多依赖于相应的类实现,但却并未开放所有的类接口。实际上,可供用户调用的类只有3个,除了前面提到的JointGrid和PairGrid外,还有一个是FacetGrid,它是一个seaborn中很多其他绘图接口的基类。
3. 关系型图表
data,pandas.dataframe对象,后面的x、y和hue均为源于data中的某一列值 x,绘图的x轴变量 y,绘图的y轴变量 hue,区分维度,一般为分类型变量
同时,relplot可通过kind参数选择绘制图表是scatter还是line类型。默认为scatter类型。
relplot
scatterplot
lineplot
4. 回归分析
在查看双变量分布关系的基础上,seaborn还提供了简单的回归接口。另外,还可设置回归模型的阶数,例如设置order=2时可以拟合出抛物线型回归线。
regplot
residplot
lmplot
5. 矩阵图
矩阵图主要用于表达一组数值型数据的大小关系,在探索数据相关性时也较为实用。
heatmap
clustermap
分类数据
1. 散点图
分类数据散点图接口主要用于当一列数据是分类变量时。相比于两列数据均为数值型数据,可以想象分类数据的散点图将会是多条竖直的散点线。绘图接口有stripplot和swarmplot两种,常用参数是一致的,主要包括:
x,散点图的x轴数据,一般为分类型数据
y,散点图的y轴数据,一般为数值型数据
hue,区分维度,相当于增加了第三个参数
data,pandas.dataframe对象,以上几个参数一般为data中的某一列
stripplot
swarmplot
2. 分布图
与数值型变量分布类似,seaborn也提供了几个分类型数据常用的分布绘图接口。且主要参数与前述的散点图接口参数是十分相近的。
boxplot
从各日期的小费箱线图中可以看出,周六这一天小费数值更为离散,且男性的小费数值随机性更强;而其他三天的小费数据相对更为稳定。
boxenplot
lvplot
lvplot=letter value+plot,是boxenplot的前身,绘图效果与后者一致。现已被boxenplot所替代,不再提倡使用。
violinplot
3. 统计(估计)图
pointplot
barplot
注:当x轴分类变量为连续日期数据时,选用pointplot得到的绘图意义更为明确;而对于其他分类型变量,则选用barplot更为合适。
countplot
4. figure-level分类绘图总接口
最后,seaborn还提供了一个用于分类数据绘图的figure-level接口catplot,catplot与其他分类数据绘图接口的关系相当于lmplot与regplot的关系;同时catplot中还可通过kind参数实现前面除countplot外的所有绘图接口,功能更为强大。kind默认为strip,此时等效于stripplot接口。
catplot
factorplot
factorplot是catplot的前身,二者实现功能完全一致,现已被后者更名替代,官方不再推荐使用。
另外,seaborn中还提供了一个时序数据绘图接口tsplot,个人用的较少。
最后简要总结seaborn制作可视化图表的几个要点:
绝大多数绘图接口名字均为XXXXplot形式
绘图数据对象主要区分连续型的数值变量和离散型的分类数据
绘图接口中的传参类型以pandas.dataframe为主,当提供了dataframe对象作为data参数后,x、y以及hue即可用相应的列名作为参数,但也支持numpy的数组类型和list类型
绘图接口底层大多依赖一个相应的类来实现,但对外开放的只有3个类:PairGrid、JointGrid和FacetGrid
接口包括了常用的分布、关系、统计、回归类图表
可灵活设置绘图风格、环境和颜色
相关阅读: