Python 数据可视化库Seaborn使用详解
定位:基于Matplotlib的高级可视化库,简化了统计绘图流程。特点内置统计功能(分布、回归、分组统计)。更加美观的默认样式。与 Pandas DataFrame 紧密结合。tips = sns.load_dataset("tips") # 小费数据iris = sns.load_dataset("iris") # 鸢尾花数据。
·
1. Seaborn 简介
-
定位:基于 Matplotlib 的高级可视化库,简化了统计绘图流程。
-
特点:
- 内置统计功能(分布、回归、分组统计)。
- 更加美观的默认样式。
- 与 Pandas DataFrame 紧密结合。
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
常用数据集:
tips = sns.load_dataset("tips") # 小费数据
iris = sns.load_dataset("iris") # 鸢尾花数据
2. 绘图分类
Seaborn 主要分为 5 大类绘图 API:
- 关系型图 (relational plots) →
scatterplot,lineplot - 分布型图 (distribution plots) →
histplot,kdeplot,displot - 分类图 (categorical plots) →
barplot,countplot,boxplot,violinplot,stripplot,swarmplot - 矩阵图 (matrix plots) →
heatmap,clustermap - 回归/统计图 (regression plots) →
lmplot,regplot,residplot
3. 关系型图
(1) 散点图
sns.scatterplot(x="total_bill", y="tip", data=tips, hue="sex", style="time", size="size")
plt.show()
hue:颜色分组style:标记样式分组size:点大小分组
(2) 折线图
sns.lineplot(x="size", y="tip", data=tips, ci=None, hue="sex", marker="o")
ci=None关闭置信区间estimator可选择mean,median
4. 分布型图
(1) 直方图
sns.histplot(tips["total_bill"], bins=20, kde=True)
(2) 核密度估计(KDE)
sns.kdeplot(tips["total_bill"], shade=True)
(3) 联合分布图
sns.jointplot(x="total_bill", y="tip", data=tips, kind="hex")
kind可选:scatter,hex,kde,reg
5. 分类图
(1) 箱型图
sns.boxplot(x="day", y="total_bill", data=tips, hue="sex")
(2) 小提琴图
sns.violinplot(x="day", y="total_bill", data=tips, hue="sex", split=True)
(3) 条形图
sns.barplot(x="day", y="tip", data=tips, estimator=sum, ci=None)
(4) 计数图
sns.countplot(x="day", data=tips, hue="sex")
(5) 蜂群图
sns.swarmplot(x="day", y="total_bill", data=tips)
6. 矩阵图
(1) 热力图
corr = tips.corr(numeric_only=True)
sns.heatmap(corr, annot=True, cmap="coolwarm")
(2) 聚类图
sns.clustermap(corr, annot=True, cmap="viridis")
7. 回归与统计图
(1) 回归拟合
sns.regplot(x="total_bill", y="tip", data=tips)
(2) 线性模型图
sns.lmplot(x="total_bill", y="tip", hue="sex", data=tips)
(3) 残差图
sns.residplot(x="total_bill", y="tip", data=tips)
8. Seaborn 风格与调色板
(1) 样式
sns.set_style("whitegrid") # white, dark, whitegrid, darkgrid, ticks
(2) 调色板
sns.set_palette("Set2") # deep, muted, bright, pastel, dark, colorblind
(3) 上下文
sns.set_context("talk") # paper, notebook, talk, poster
9. 高级用法
(1) Pairplot(多变量关系)
sns.pairplot(iris, hue="species")
(2) FacetGrid(分面绘图)
g = sns.FacetGrid(tips, col="sex", row="time", margin_titles=True)
g.map(sns.scatterplot, "total_bill", "tip")
(3) 自定义主题
custom_params = {"axes.spines.right": False, "axes.spines.top": False}
sns.set_theme(style="whitegrid", rc=custom_params)
10. 常见技巧
- 保存图片
plt.savefig("plot.png", dpi=300, bbox_inches="tight")
- 与 Pandas 结合
sns.histplot(data=tips, x="total_bill", hue="sex", multiple="stack")
- 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
11.综合示例
示例 1:多变量关系分析(散点 + 回归 + FacetGrid)
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
# 按照性别 & 就餐时间分面
g = sns.FacetGrid(tips, col="sex", row="time", margin_titles=True, height=4)
g.map(sns.regplot, "total_bill", "tip", scatter_kws={"alpha":0.5}, line_kws={"color":"red"})
plt.show()
用途:分析不同性别、午餐/晚餐场景下,账单与小费的关系。
示例 2:分布对比(直方图 + KDE + 分组)
iris = sns.load_dataset("iris")
# 对比三类鸢尾花的萼片长度分布
sns.histplot(data=iris, x="sepal_length", hue="species", kde=True, element="step", stat="density", common_norm=False)
plt.title("Distribution of Sepal Length by Species")
plt.show()
用途:可视化不同类别的分布差异,常用于分类问题的数据探索。
示例 3:分类数据比较(箱线图 + 蜂群图)
# 箱线图 + 蜂群点叠加
sns.boxplot(x="day", y="total_bill", hue="sex", data=tips, palette="Set2")
sns.swarmplot(x="day", y="total_bill", hue="sex", data=tips, dodge=True, color=".25")
plt.title("Boxplot + Swarmplot of Total Bill by Day & Sex")
plt.show()
用途:展示不同分组的分布情况,同时用散点避免箱线图掩盖数据细节。
总结:
Seaborn 的核心思想是 以统计数据为中心的可视化,适合快速探索性分析 (EDA)。它可以极大简化 matplotlib 代码,并与 pandas 高度融合。
12. 补充Seaborn 常用关键函数
1. 关系型图(Relational Plots)
sns.scatterplot()
-
作用:二维散点图,用于数值变量之间的关系可视化。
-
常用参数:
x, y:横纵坐标hue:颜色分组style:点样式分组size:点大小分组palette:调色板
-
示例:
sns.scatterplot(x="total_bill", y="tip", data=tips, hue="sex", style="time", size="size")
sns.lineplot()
-
作用:折线图,适合时间序列或趋势分析。
-
常用参数:
ci:置信区间(默认95%,可None关闭)estimator:聚合函数(默认mean,可改median)
-
示例:
sns.lineplot(x="size", y="tip", data=tips, ci=None, hue="sex", marker="o")
2. 分布型图(Distribution Plots)
sns.histplot()
-
作用:直方图,可叠加 KDE 曲线。
-
常用参数:
bins:柱子数量kde=True:叠加核密度曲线multiple:多组数据对比方式(stack堆叠,dodge并排)
-
示例:
sns.histplot(data=tips, x="total_bill", hue="sex", kde=True, multiple="stack")
sns.kdeplot()
-
作用:核密度估计曲线。
-
常用参数:
shade=True:填充曲线下方bw_adjust:带宽调整(越小越“尖锐”)
-
示例:
sns.kdeplot(tips["total_bill"], shade=True, bw_adjust=0.5)
sns.jointplot()
-
作用:显示两个变量的联合分布 + 边际分布。
-
常用参数:
kind:图类型 (scatter,hex,kde,reg)
-
示例:
sns.jointplot(x="total_bill", y="tip", data=tips, kind="hex")
3. 分类图(Categorical Plots)
sns.boxplot()
-
作用:箱线图,展示数据分布和异常值。
-
常用参数:
hue:分组比较order:分类顺序
-
示例:
sns.boxplot(x="day", y="total_bill", data=tips, hue="sex")
sns.violinplot()
-
作用:小提琴图,结合箱线图和 KDE 曲线。
-
常用参数:
split=True:双向对比
-
示例:
sns.violinplot(x="day", y="total_bill", data=tips, hue="sex", split=True)
sns.barplot()
-
作用:条形图,显示分组统计值。
-
常用参数:
estimator:统计函数(默认均值)ci:置信区间(None关闭)
-
示例:
sns.barplot(x="day", y="tip", data=tips, estimator=sum, ci=None)
sns.countplot()
- 作用:计数条形图。
- 示例:
sns.countplot(x="day", data=tips, hue="sex")
sns.swarmplot()
- 作用:点状散布(避免重叠,类似蜂群)。
- 示例:
sns.swarmplot(x="day", y="total_bill", data=tips)
4. 矩阵图(Matrix Plots)
sns.heatmap()
-
作用:热力图,常用于相关矩阵。
-
常用参数:
annot=True:显示数值cmap:配色方案center=0:居中对称色带
-
示例:
sns.heatmap(tips.corr(numeric_only=True), annot=True, cmap="coolwarm")
sns.clustermap()
- 作用:带层次聚类的热力图。
- 示例:
sns.clustermap(tips.corr(numeric_only=True), annot=True, cmap="vlag")
5. 回归图(Regression Plots)
sns.regplot()
- 作用:散点图 + 线性回归拟合。
- 示例:
sns.regplot(x="total_bill", y="tip", data=tips)
sns.lmplot()
- 作用:分组回归拟合(
FacetGrid封装)。 - 示例:
sns.lmplot(x="total_bill", y="tip", hue="sex", data=tips)
sns.residplot()
- 作用:残差图,用于检验回归模型。
- 示例:
sns.residplot(x="total_bill", y="tip", data=tips)
6. 辅助函数
sns.set_style()
sns.set_style("whitegrid") # white, dark, whitegrid, darkgrid, ticks
sns.set_palette()
sns.set_palette("Set2") # deep, muted, bright, pastel, dark, colorblind
sns.set_context()
sns.set_context("talk") # paper, notebook, talk, poster
sns.pairplot()
- 作用:多维变量的两两关系。
sns.pairplot(iris, hue="species")
sns.FacetGrid()
- 作用:自定义分面绘制。
g = sns.FacetGrid(tips, col="sex", row="time")
g.map(sns.scatterplot, "total_bill", "tip")
更多推荐
所有评论(0)