
01
引言
说到数据可视化,Seaborn就像一颗隐藏的宝石!在进行探索性数据分析时,我们通常从Matplotlib 开始,而对 Seaborn 的探索相对较少!但是,只要你了解 Seaborn 的全部潜力,你就会惊奇地发现,我们可以在数据中探索出更多有趣的东西。
02
安装
在深入学习示例之前,让我们先确保Seaborn已安装。如果尚未安装,请使用以下命令:
pip install seaborn
03
简单直方图
import seaborn as snsimport matplotlib.pyplot as plt# Load the "tips" datasettips = sns.load_dataset("tips")tips.head()# Count Plotplt.figure(figsize=(8, 5))sns.countplot(x="day", data=tips, palette="Set3")plt.title("Count of Tips by Day of the Week")plt.show()
运行后得到如下:

本示例使用函数countplot创建一个简单的直方图。小费数据集是关于人们在餐厅中给出的小费,首先展示了数据集中的前五行的样例数据,接着进行了直方图的绘制。通过上述直方图,可以观察人们付小费的次数随工作日变化的计数图。
04
分簇散点图
分簇散点图Swarm Plot 通常在 x 轴上显示分类变量,在y轴上显示数值变量,并沿着每个类别显示单个数据点。现在,正如你所猜测的那样,这可以让我们直观地看到类别内数据点的分布和密度。
我们来看个示例如下:
import seaborn as snsimport matplotlib.pyplot as plt# Load the "tips" datasettips = sns.load_dataset("tips")# Swarm Plotplt.figure(figsize=(8, 5))sns.swarmplot(x="day", y="total_bill", data=tips, palette="viridis")plt.title("Total Bill Distribution by Day of the Week")plt.xlabel("Day of the Week")plt.ylabel("Total Bill ($)")plt.show()
运行后得到结果如下:

05
点阵图
点阵图Point Plot通常在 x 轴上显示分类变量,在 y 轴上显示数值变量,可以深入了解每类数据的分布和中心点倾向。
绘制点阵图的示例代码如下:
import seaborn as snsimport matplotlib.pyplot as plt# Load the "tips" datasettips = sns.load_dataset("tips")# Point Plotplt.figure(figsize=(8, 5))sns.pointplot(x="day", y="total_bill", data=tips, ci="sd", palette="pastel")plt.title("Average Total Bill by Day of the Week")plt.xlabel("Day of the Week")plt.ylabel("Average Total Bill ($)")plt.show()

06
分类变量通常控制组或类别,而数值变量则用于在每个类别中创建小提琴图。小提琴图中某一点的宽度表示该值所在数据点的密度,小提琴图的中心部分就像一把小提琴,因此被称为小提琴图。通常使用函数 sns.violinplot 绘制小提琴图。
我们不妨来看个示例如下:
import seaborn as snsimport matplotlib.pyplot as plt# Load the "tips" datasettips = sns.load_dataset("tips")# Categorical Violin Plotplt.figure(figsize=(8, 5))sns.violinplot(x="day", y="total_bill", data=tips, palette="Set2")plt.title("Total Bill Distribution by Day of the Week")plt.xlabel("Day of the Week")plt.ylabel("Total Bill ($)")plt.show()
运行后,得到结果如下:
07
回归图(Regression Plot)的重点是突出两个数字变量之间的关系:自变量(通常在 x 轴上)和因变量(在 y 轴上)。单个数据点以点的形式显示,回归图的中心元素是回归线或曲线,它代表了描述变量之间关系的最佳拟合数学模型。
我们来看个示例:
import seaborn as snsimport matplotlib.pyplot as plt# Load the "tips" datasettips = sns.load_dataset("tips")# Regression Plotplt.figure(figsize=(8, 5))sns.regplot(x="total_bill", y="tip", data=tips, scatter_kws={"color": "blue"}, line_kws={"color": "red"})plt.title("Regression Plot of Total Bill vs. Tip")plt.xlabel("Total Bill ($)")plt.ylabel("Tip ($)")plt.show()
运行后,得到结果如下:
上图中,绘制的回归线表示根据账单总额预测小费的最佳拟合线性模型。散点表示单个数据点,我们可以观察到这些数据点是如何聚集在回归线周围的。该图有助于了解这两个变量之间的线性关系。
08
联合分布图(Joint Plot)结合了散点图、直方图和密度图来直观显示两个数值变量之间的关系。散点图是联合图的核心元素,它将两个变量的数据点相对应地显示出来,沿着散点图的 x 轴和 y 轴,每个变量都有直方图或核密度估计图。这些边际图分别显示每个变量的分布情况。
我们来看个示例:
import seaborn as snsimport matplotlib.pyplot as plt# Load the "tips" datasettips = sns.load_dataset("tips")# Joint Plotsns.jointplot(x="total_bill", y="tip", data=tips, kind="scatter")plt.show()
运行后,得到结果如下:
我们可以看到,通过散点图显示了两个变量之间的关系,而边际直方图则分别显示了每个变量的分布情况。
09
六边形图
六边形图(Hexbin plot)是六边形分隔图的简称,它将数据点分组到六边形箱中,使大家能够更有效地直观显示数据密度和模式。当单个点的散点图变得过于拥挤且难以解读时,六边形分隔图对于这类大型数据集尤为重要!
在Seaborn中,我们可以自定义颜色图、网格大小和其他绘图参数,以微调六边形绘图的外观。绘制六边形图的示例代码如下:
import seaborn as snsimport matplotlib.pyplot as plt# Load the "tips" datasettips = sns.load_dataset("tips")# Hexbin Plotplt.figure(figsize=(8, 5))sns.jointplot(x="total_bill", y="tip",kind='hex', data=tips, gridsize=15, cmap="Blues")plt.title("Hexbin Plot of Total Bill vs. Tip")plt.xlabel("Total Bill ($)")plt.ylabel("Tip ($)")plt.show()

10
关系图
通过关系图,大家可以直观地看到两个数值变量之间的关系,以及其他分类或数值维度。一般使用函数sns.relplot()进行绘制,大家可以使用色调参数根据分类变量为数据点着色,使用大小参数根据数值变量改变标记大小,使用样式参数根据分类变量区分标记或线条。
我们来看个例子,如下:
import seaborn as snsimport matplotlib.pyplot as plt# Load the "tips" datasettips = sns.load_dataset("tips")# Create a scatterplot using a Relational Plot (relplot)sns.relplot(x="total_bill", y="tip", data=tips, hue="time", style="sex", size="size", palette="Set1", height=6)plt.title("Relational Scatter Plot for Tips Dataset")plt.xlabel("Total Bill ($)")plt.ylabel("Tip ($)")plt.savefig('relplot_with_mv.png')plt.show()
11
面网格图
面网格图是Seaborn的一项功能,它允许大家创建一个子网格,每个子网格代表数据集中的一个不同子集。通过这种方式,面网格图可用于比较不同类别中多个变量之间的关系。
一般来说,使用函数sns.FacetGrid() 来创建面网格图,并返回网格对象。创建网格对象后,我们需要将其映射到我们选择的任何绘图中。
import seaborn as snsimport matplotlib.pyplot as plt# Load the "tips" datasettips = sns.load_dataset("tips")# Create a Facet Grid of histograms for different daysg = sns.FacetGrid(tips, col="day", height=4, aspect=1.2)g.map(sns.histplot, "total_bill", kde=True)g.set_axis_labels("Total Bill ($)", "Frequency")g.set_titles(col_template="{col_name} Day")plt.savefig('facet_grid_hist_plot.png')plt.show()
12
配对图
配对图(Pair Plot)提供了一个由散点图和直方图组成的网格,其中每个图都显示了两个变量之间的关系,因此也被称为配对图或散点图矩阵。
绘制配对图的示例代码如下:
import seaborn as snsimport matplotlib.pyplot as plt# Load the "iris" datasetiris = sns.load_dataset("iris")# Pair Plotsns.set(style="ticks")sns.pairplot(iris, hue="species", markers=["o", "s", "D"])plt.show()
13
Seaborn是一个通用且功能强大的 Python 数据可视化库。本文介绍了一系列高级示例,展示了各种绘图类型。请尝试使用所提供的代码示例,深入了解 Seaborn的功能,提高大家数据可视化的技能。
您学废了嘛?
点击上方小卡片关注我
扫码进群,交个朋友!


