seaborn是python中的一个可视化库,是对matplotlib进行二次封装而成,既然是基于matplotlib,所以seaborn的很多图表接口和参数设置与其很是接近。
seaborn的风格设置主要分为两类,其一是风格(style)设置,其二是环境(context)设置。
seaborn设置风格的方法主要有三种:
当前支持的风格主要有5种:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KmKNgDI2-1655023913644)(file:///C:\Users\ALANSHAO\Documents\Tencent Files\2544388016\Image\C2C\ZK]BFEZL(VE$]Y4)]I4@2}1X.png)
相比matplotlib绘图风格,seaborn绘制的直方图会自动增加空白间隔,图像更为清爽。
而不同seaborn风格间,则主要是绘图背景色的差异。
设置环境的方法也有3种:
当前支持的绘图环境主要有4种:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x6sqoRXU-1655023913645)(D:\QQ文件\QQ图片20220612162728.png)]
可以看出,4种默认绘图环境最直观的区别在于字体大小的不同,而其他方面也均略有差异。
seaborn风格多变的另一大特色就是支持个性化的颜色配置。颜色配置的方法有多种,常用方法包括以下两个:
同时,为了便于查看调色板样式,seaborn还提供了一个专门绘制颜色结果的方法palplot。
# 科学计算包
import numpy as np
# 数据分析包
import pandas as pd
# 画图包
import matplotlib as mpl
import matplotlib.pyplot as plt
# 画图包
import seaborn as sns
%matplotlib inline
sns.set_theme()
tips = pd.read_csv('tips.csv')
ps.sample(20)
sns.relplot(data=tips,
x='total_bill',
y='tip',
hue="time",
col="day",
col_wrap=2)
seaborn内置了大量集成绘图接口,往往仅需一行代码即可实现美观的图表结果。
按照数据类型,大体可分为**连续性(数值变量)和离散型(分类数据)**两类接口。
变量分布可用于表达一组数值的分布趋势,包括集中程度、离散程度等。
seaborn中提供了3种表达单变量分布的绘图接口
distribution+plot,接口内置了直方图(histogram)、核密度估计图(kde,kernel density estimation)以及rug图(直译为地毯,绘图方式就是将数值出现的位置原原本本的以小柱状的方式添加在图表底部),3种图表均可通过相应参数设置开关状态,默认情况下是绘制hist+kde。
kdeplot是一个专门绘制核密度估计图的接口,虽然distplot中内置了kdeplot图表,并且可通过仅开启kde开关实现kdeplot的功能,但kdeplot实际上支持更为丰富的功能,比如当传入2个变量时绘制的即为热力图效果。
这是一个不太常用的图表类型,其绘图方式比较朴素:即原原本本的将变量出现的位置绘制在相应坐标轴上,同时忽略出现次数的影响。
单变量分布仅可用于观察单一维度的变化关系,为了探究多变量间分布关系时,如下绘图接口更为有效:
joint意为联合,顾名思义jointplot是一个双变量分布图表接口。绘图结果主要有三部分:绘图主体用于表达两个变量对应的散点图分布,在其上侧和右侧分别体现2个变量的直方图分布
当变量数不止2个时,pairplot是查看各变量间分布关系的首选。它将变量的任意两两组合分布绘制成一个子图,对角线用直方图、而其余子图用相应变量分别作为x、y轴绘制散点图。显然,绘制结果中的上三角和下三角部分的子图是镜像的。
seaborn还提供了几个用于表达双变量关系的图表,主要包括点图和线图两类。
主要提供了3个接口,relplot(relation+plot)、scatterplot和lineplot,其中relplot为figure-level(可简单理解为操作对象是matplotlib中figure),而后两者是axes-level(对应操作对象是matplotlib中的axes),但实际上接口调用方式和传参模式都是一致的,其核心参数主要包括以下4个:
同时,relplot可通过kind参数选择绘制图表是scatter还是line类型。默认为scatter类型。
仍以鸢尾花数据集为例,绘制不同种类花的两变量散点图如下:
也可实现同样的散点图效果:
lineplot不同于matplotlib中的折线图,会将同一x轴下的多个y轴的统计量(默认为均值)作为折线图中的点的位置,并辅以阴影表达其置信区间。可用于快速观察点的分布趋势。
在查看双变量分布关系的基础上,seaborn还提供了简单的回归接口。
另外,还可设置回归模型的阶数,例如设置order=2时可以拟合出抛物线型回归线。
基础回归模型接口,即regression+plot。绘图结果为散点图+回归直线即置信区间。另外,还可通过logistic参数设置是否启用逻辑回归。
residplot提供了拟合后的残差分布图,相当于先执行lmplot中的回归拟合,而后将回归值与真实值相减结果作为绘图数据。直观来看,当残差结果随机分布于y=0上下较小的区间时,说明具有较好的回归效果。
lmplot=regplot+FacetGrid,也是用于绘制回归图表,但功能相比更为强大,除了增加hue参数支持分类回归外,还可添加row和col参数(二者均为FacetGrid中的常规参数,用于添加多子图的行和列)实现更多的分类回归关系。这里以seaborn中的小费数据集进行绘制,得到如下回归图表:
矩阵图主要用于表达一组数值型数据的大小关系,在探索数据相关性时也较为实用。
原原本本的将一组数据以热力图矩阵的形式展现出来,同时可通过设置数值上下限和颜色板实现更为美观的效果。如下图表展示了鸢尾花数据集中各变量间的相关系数,从中可以很容易看出sepal_length、petal_length、petal_width三者之间彼此呈现较强的相关性,而sepal_width则与它们相关性不大。
在heatmap的基础上,clustermap进一步挖掘各行数据间的相关性,并逐一按最小合并的原则进行聚类,给出了聚类后的热力图:
分类数据散点图接口主要用于当一列数据是分类变量时。相比于两列数据均为数值型数据,可以想象分类数据的散点图将会是多条竖直的散点线。绘图接口有stripplot和swarmplot两种,常用参数是一致的,主要包括:
常规的散点图接口,可通过jitter参数开启散点左右"抖动"效果(实际即为在水平方向上加了一个随机数控制x坐标,默认jitter=True;当设置jitter为False时,散点图均严格位于一条直线上)
与数值型变量分布类似,seaborn也提供了几个分类型数据常用的分布绘图接口。且主要参数与前述的散点图接口参数是十分相近的。
ndas.dataframe对象,以上几个参数一般为data中的某一列
常规的散点图接口,可通过jitter参数开启散点左右"抖动"效果(实际即为在水平方向上加了一个随机数控制x坐标,默认jitter=True;当设置jitter为False时,散点图均严格位于一条直线上)
与数值型变量分布类似,seaborn也提供了几个分类型数据常用的分布绘图接口。且主要参数与前述的散点图接口参数是十分相近的。