本文转载自微信公众号「数仓宝贝库」,作者王恺 等。转载本文请联系数仓宝贝库公众号。
Seaborn是一种开源的数据可视化工具,它在Matplotlib的基础上进行了更高级的API封装,因此可以进行更复杂的图形设计和输出。Seaborn是Matplotlib的重要补充,可以自主设置在Matplotlib中被默认的各种参数,而且它能高度兼容NumPy与Pandas数据结构以及Scipy与statsmodels等统计模式。Seaborn已集成在Anaconda中,无须再次安装。
01关系图
关系图能够直观地展示数据变量之间的关系以及这些关系如何依赖于其他变量,Seaborn中常用的绘制数据关系图的函数是relplot(),其语法格式如下:
- seaborn.relplot(*[, x, y, hue, size, style, data, kind, …])
参数说明如下:
relplot函数提供了几种可视化数据变量之间关系的方法,通过kind参数选择要使用的方法,并通过hue、size和style等参数来显示数据的不同子集。常见的关系图有两种,即散点图和线形图,因此Seaborn还提供了scatterplot和lineplot函数,它们的语法格式如下:
- seaborn.scatterplot(*[, x, y, hue, style, size, …])
- seaborn.lineplot((*[, x, y, hue, style, size, …]))
scatterplot用于绘制散点图,相当于seaborn.relplot(kind="scatter");lineplot用于绘制线形图,相当于seaborn.relplot(kind="line");其他参数及含义与relplot函数相同。当其中一个变量是连续变量时,更适合使用线形图表示变量之间的关系。
下面通过代码清单1演示如何用Seaborn绘制关系图。
- 代码清单1 Seaborn绘制关系图的示例
- 1 import matplotlib.pyplot as plt
- 2 import seaborn as sns
- 3 tips= sns.load_dataset("tips")
- 4 print(tips.head())
- 5 sns.relplot(x='total_bill', y='tip', data=tips, hue='smoker', style='sex', size='size')
- 6 plt.show()
程序执行结束后,输出的结果如下:
- total_bill tip sex smoker day time size
- 0 16.99 1.01 Female No Sun Dinner 2
- 1 10.34 1.66 Male No Sun Dinner 3
- 2 21.01 3.50 Male No Sun Dinner 3
- 3 23.68 3.31 Male No Sun Dinner 2
- 4 24.59 3.61 Female No Sun Dinner 4
- <seaborn.axisgrid.FacetGrid at 0x16dea2711f0>
程序绘制的关系图如图1所示。
图1 Seaborn绘制散点关系图示例
下面对代码清单1中的代码做简要说明。
sns.load_dataset()函数是连网加载在线数据集,还可以在https://github.com/mwaskom/ seaborn-data网站中将数据集下载到本地使用。
02分布图
分布图可以直观地显示一个或多个变量在某个维度上的分布情况。Seaborn提供了几种常用的绘制分布图的函数,包括displot()、histplot()、rdeplot()、rugplot()、distplot()和jointplot()等。
1. displot()函数
displot()函数提供了几种可视化数据单变量或双变量分布的方法,语法格式如下:
- seaborn.displot([data, x, y, hue, row, col, …])
主要参数说明如下:
displot函数通过kind参数选择要使用的绘制数据分布情况的方法,并通过hue、row、col等参数来处理不同的数据子集。Seaborn还提供了三个更具体的绘制分布图的函数histplot()、kdeplot()和ecdfplot(),语法格式如下:
- seaborn.histplot([data, x, y, hue, weights, stat, …])
- seaborn.kdeplot([x, y, shade, vertical, kernel, bw, …])
- seaborn.ecdfplot([data, x, y, hue, weights, stat, …])
2. rugplot()函数
rugplot()函数的功能是绘制轴须图(毛毯分布图),即通过边缘轴须线的方式显示单个观测点的位置,以补充其他分布图,其语法格式如下:
- seaborn.rugplot([x, height=0.025, axis, ax, data, y, hue, …])
主要参数说明如下:
x和y分别是x轴和y轴的观测值向量。
3. distplot()函数
distplot()函数整合了Matplotlib的hist()函数与Seaborn的kdeplot()函数的功能,并增加了rugplot()函数绘制轴须图的功能,因此它是一个功能非常强大且灵活实用的绘制分布图函数,其语法格式如下:
- seaborn.distplot([a, bins, hist, kde, rug, fit, …])
主要参数说明如下:
下面通过代码清单2演示如何通过Seaborn绘制分布图。
- 代码清单2 Seaborn绘制分布图的示例
- 1 import seaborn as sns
- 2 import matplotlib.pyplot as plt
- 3 tips= sns.load_dataset("tips")
- 4 sns.set_theme(style="whitegrid")
- 5 sns.displot(data=tips, x="total_bill", col="time", row="sex", binwidth=3, height=3, facet_kws= dict(margin_titles=True))
- 6 plt.subplots()
- 7 sns.distplot(a=tips['total_bill'], rug=True, hist=False)
- 8 plt.show()
程序执行结束后,输出的图像如图2和图3所示。
下面对代码清单2中的代码做简要说明。
图2 seaborn.displot函数绘制分布图示例
图3 seaborn.distplot函数绘制高斯核密度估计曲线示例
4. jointplot函数
seaborn.jointplot()函数提供了几种绘制两个变量的联合分布图的方法,其语法格式如下:
- seaborn.jointplot(*[,x,y,data,kind,color,...])
主要参数说明如下:
下面通过代码清单3演示如何通过jointplot函数绘制分布图。
- 代码清单3 jointplot函数绘制分布图的示例
- 1import seaborn as sns
- 2import matplotlib.pyplot as plt
- 3tips = sns.load_dataset("tips")
- 4sns.set(style="white") #设置风格样式
- 5sns.jointplot(x="total_bill", y="tip", data=tips)
- 6plt.show()
程序执行结束后,输出的图像如图4所示。
图4 jointplot函数绘制联合分布图示例
下面对代码清单3中的代码做简要说明。
03分类图
分类图展示数据根据特定变量进行分类后的统计情况。常用的分类图包括分类散点图、箱形图、条形图等。Seaborn的catplot()函数提供了几种不同的分类可视化方法,以便显示数值变量与一个或多个分类变量之间的关系,常用语法格式如下:
- seaborn.catplot(*[,x,y,hue,data,row,col,kind,...])
参数说明如下:
catplot()函数通过kind参数选择要使用的绘制数据分类的方法,并通过hue、row、col等参数来处理不同的数据子集。Seaborn还提供了三类更具体的绘制分类图的函数,包括分类散点图、分类分布图和分类预测图。
1.分类散点图函数
分类散点图函数包括stripplot()和swarmplot(),常用的语法格式如下:
- seaborn.stripplot(*[, x, y, hue, data, order, …])
- seaborn.swarmplot(*[, x, y, hue, data, order, …])
seaborn.stripplot(*[,seaborn.swarmplot(*[,stripplot()相当于seaborn.catplot(kind= "strip"),可以显示测量变量在每个类别的分布情况,绘制的散点呈带状,数据较多时会有重叠的部分。
swarmplot()相当于seaborn.catplot(kind= "swarm"),它与stripplot()类似,但绘制的数据点不会重叠。
2.分类分布图函数
分类分布图函数包括boxplot()、violinplot()和boxenplot(),常用的语法格式如下:
- seaborn.boxplot(*[, x, y, hue, data, order, …])
- seaborn.violinplot(*[, x, y, hue, data, order, …])
- seaborn.boxenplot(*[, x, y, hue, data, order, …])
3.分类预测图函数
分类预测图函数包括pointplot()、barplot()和countplot(),常用的语法格式如下:
- seaborn.pointplot(*[, x, y, hue, data, order, …])
- seaborn.barplot(*[, x, y, hue, data, order, …])
- seaborn.countplot(*[, x, y, hue, data, order, …])
下面通过代码清单4演示如何通过Seaborn绘制分类图。
- 代码清单4 Seaborn绘制分类图的示例
- 1 import seaborn as sns
- 2 import pandas as pd
- 3 import matplotlib.pyplot as plt
- 4 tips = sns.load_dataset("tips")
- 5 sns.set_theme(style="whitegrid")
- 6 f = sns.catplot(data=tips, kind="bar",x="day", y="total_bill", hue="smoker")
- 7 f.despine(left=True)
- 8 f.set_axis_labels("day", "total_bill")
- 9 f.legend.set_title("smoker")
- 10 plt.subplots()
- 11 sns.boxplot(x="day", y="total_bill", data=tips)
- 12 plt.show()
程序执行结束后,输出的图像如图5和图6所示。
下面对代码清单4中的代码做简要说明。
图5 seaborn.catplot()函数绘制分类图示例
图6 seaborn.boxplot()函数绘制箱形图示例
04回归图
回归图是使用统计模型估计两个变量间的关系。Seaborn提供了常用的绘制回归图的函数regplot()和lmplot()。regplot()函数的功能是绘制数据和线性回归模型拟合的曲线,常用的语法格式如下:
- seaborn.regplot(*[, x, y, data, x_estimator, …])
主要参数说明如下:
data是输入的数据集,数据类型是DataFrame对象,即每一列对应一个变量,每一行对应一个观察值。
x和y是输入变量,数据类型可以是字符串、Series对象或者向量数组等。如果是字符串,则与data中的列名相对应。如果是Pandas对象,则坐标轴被标记为Series名称。
lmplot()函数结合了regplot()和FacetGrid的功能,为绘制数据集的条件子集的回归模型提供接口,语法格式如下:
- seaborn.lmplot(*[, x, y, data, hue, col, row, …])
主要参数说明如下:
regplot()和lmplot()函数密切相关,两者主要的区别是:regplot接受各种类型的x和y参数,包括numpy arrays 、pandas.series 或者pandas.Dataframe对象;而lmplot()的x和y参数只接受字符串类型。
下面通过代码清单5演示如何通过Seaborn绘制回归图。
- 代码清单5 Seaborn绘制回归图的示例
- 1 import seaborn as sns
- 2 import matplotlib.pyplot as plt
- 3 tips = sns.load_dataset("tips")
- 4 sns.regplot(x="total_bill", y="tip", data=tips)
- 5 sns.lmplot(x="total_bill", y="tip", hue="smoker",col='sex', data=tips)
- 6 plt.show()
程序执行结束后,输出的图像如图7和图8所示。
图7 seaborn.regplot()函数绘制回归图示例
图8 seaborn.lmplot()函数绘制回归图示例
下面对代码清单5中的代码做简要说明。
05热力图
热力图是将不同的数据值用不同的标志加以标注的一种可视化分析手段,标注的手段一般包括颜色的深浅、点的疏密以及呈现比重的形式。在数据分析中,如果离散数据波动变化比较大,那么可以使用热力图来观察波动变化。
Seaborn提供的heatmap()函数可以为二维数据绘制由颜色编码矩阵组成的热力图,语法格式如下:
- seaborn.heatmap(data, *[, vmin, vmax, cmap, center, …])
主要参数说明如下:
下面通过代码清单6演示如何通过Seaborn绘制热力图。
- 代码清单6 Seaborn绘制热力图的示例
- 1 import numpy as np
- 2 import seaborn as sns
- 3 import matplotlib.pyplot as plt
- 4 np.random.seed(0)
- 5 uniform_data = np.random.rand(10, 12)
- 6 sns.heatmap(uniform_data)
- 7 plt.show()
程序执行结束后,输出的图像如图9所示。
图9 seaborn.heatmap()函数绘制热力图示例
下面对代码清单6中的代码做简要说明。
本文摘编于《Python数据分析与应用》,经出版方授权发布。