目录
-
-
- [1、 Seaborn 全方位解析](#1、 Seaborn 全方位解析)
- [2、与 Matplotlib 的关系------"底层引擎"与"高层接口"的协作](#2、与 Matplotlib 的关系——“底层引擎”与“高层接口”的协作)
- [3. 可视化的目标:让人看懂**](#3. 可视化的目标:让人看懂**)
-
- [3.1 直观性:信息一眼可见**](#3.1 直观性:信息一眼可见**)
- [3.2 简洁性:去除冗余,突出核心**](#3.2 简洁性:去除冗余,突出核心**)
- [3.3 针对性:图表与问题挂钩**](#3.3 针对性:图表与问题挂钩**)
- [3.4 逻辑性:让图表组成完整故事**](#3.4 逻辑性:让图表组成完整故事**)
- [3.5 可解释性:让非技术人员也懂**](#3.5 可解释性:让非技术人员也懂**)
- [4. Matplotlib、Seaborn 快速入门**](#4. Matplotlib、Seaborn 快速入门**)
-
- [4.1 基本示例**](#4.1 基本示例**)
- [4.2 用 Matplotlib 绘图(对比用)**](#4.2 用 Matplotlib 绘图(对比用)**)
- [4.3 用 Seaborn 绘图(推荐写法)**](#4.3 用 Seaborn 绘图(推荐写法)**)
- [4.4 其他常见 Seaborn 图表(全部实战过)**](#4.4 其他常见 Seaborn 图表(全部实战过)**)
- [5、新增:高级综合仪表盘(FacetGrid + catplot 多面板)------最复杂场景**](#5、新增:高级综合仪表盘(FacetGrid + catplot 多面板)——最复杂场景**)
- 6、扩展:相关性热力图(heatmap)**
-
- [**6.1 使用建议(踩坑全记录)**](#6.1 使用建议(踩坑全记录))
- [7. 常见图表的选择(业务场景全覆盖)**](#7. 常见图表的选择(业务场景全覆盖)**)
-
- [7.1 趋势 / 关系 → jointplot & pairplot**](#7.1 趋势 / 关系 → jointplot & pairplot**)
- [7.2 对比 → barplot / countplot**](#7.2 对比 → barplot / countplot**)
- [7.3 分布 → violinplot(重头戏)**](#7.3 分布 → violinplot(重头戏)**)
- **总结**
- [点赞、收藏、转发走一波!持续 2025 AI 打卡中~ 欢迎 Star + Fork 一起学!](#点赞、收藏、转发走一波!持续 2025 AI 打卡中~ 欢迎 Star + Fork 一起学!)
-
1、 Seaborn 全方位解析
Seaborn 是基于 Python 的统计数据可视化库,核心定位是"让数据分析中的可视化更简单、更美观"。它并非独立的绘图引擎,而是在 Matplotlib 基础上,针对统计场景做了高层封装,主要特点包括:
- 统计友好:内置大量专为统计分析设计的图表类型(如小提琴图、热力图、聚类图、时间序列趋势图),无需手动计算统计量即可直接可视化(如分布、相关性、分组对比);
- 美观默认:自带 5 种预设主题(如 darkgrid、whitegrid)和科学配色方案(如 husl、Set2),默认生成的图表符合学术出版或商业汇报的审美标准,无需反复调整细节;
- Pandas 无缝集成:直接支持 Pandas DataFrame 作为输入,通过指定"列名"即可完成数据映射(如 x="列名"、hue="分组列名"),无需手动提取数据或转换格式;
- 极简 API:复杂图表(如多子图联动、分类数据对比)仅需 1-2 行代码即可实现,大幅降低统计可视化的学习成本和代码量。
2、与 Matplotlib 的关系------"底层引擎"与"高层接口"的协作
| 维度 | Matplotlib | Seaborn |
|---|---|---|
| 定位 | 通用绘图"基石"(底层引擎) |
统计可视化"高层接口"(专用工具) |
| 核心能力 | 完全控制图表像素级细节(如坐标轴刻度、图例位置、注释文本),支持任意自定义;但统计场景需手动编写大量代码(如分组绘图、计算分布) |
专注统计场景,一键实现复杂统计图表;但极致自定义需依赖 Matplotlib 接口 |
| 依赖关系 | Seaborn 的底层渲染完全依赖 Matplotlib(所有 Seaborn 图表最终都通过 Matplotlib 生成) |
无法脱离 Matplotlib 独立运行,需同时导入 matplotlib.pyplot 控制显示/保存 |
| 适用场景 | 非统计类可视化(如工程图纸、自定义示意图)、图表细节微调 |
数据分析中的统计可视化(如探索数据分布、验证假设、展示分析结论) |
3. 可视化的目标:让人看懂**
3.1 直观性:信息一眼可见**
数据分析的最终目的,不是停留在"代码跑通"或"模型上线",而是把复杂的洞察清晰地传递给老板、产品经理或非技术同事。Seaborn 的最大价值就在于:3秒让人看懂!
例如下面这张 countplot,一眼就能看出"三等舱死亡人数远超其他舱位":
python
sns.countplot(data=train, x="Pclass", hue="Survived", palette="husl")
plt.title("不同舱位生存 vs 死亡人数(一眼看出三等舱最危险)")

3.2 简洁性:去除冗余,突出核心**
Seaborn 默认就自带美学 + 统计计算,省掉 Matplotlib 80% 的调参代码。
以前 Matplotlib 要写 25 行才能出好看的图,现在 Seaborn 3~5 行就够:
python
sns.set_theme(style="darkgrid", palette="husl") # 一行切换专业风
3.3 针对性:图表与问题挂钩**
我们所有图表都紧紧围绕 "谁更容易在泰坦尼克号生存?" 这个核心业务问题:
- 舱位影响多大?
- 性别/年龄/票价有没有规律?
- 不同港口登船的人群特征差异?
3.4 逻辑性:让图表组成完整故事**
Day5 的图表顺序就是完整故事线:
- countplot(人数统计)
- barplot(平均生存率)
- violinplot(分布细节,最重点)
- heatmap(相关性一览)
- FacetGrid 多面板仪表盘(3 维度同时看)
3.5 可解释性:让非技术人员也懂**
每张图都配业务解读标题,例如:
- "Cherbourg 上船的乘客票价最高,生存率也最高"
- "三等舱 20~30 岁男性死亡率极高"
4. Matplotlib、Seaborn 快速入门**
4.1 基本示例**
python
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
matplotlib.use('TkAgg') # VS Code 弹窗必备
train = pd.read_csv('../data/titanic.csv')
sns.set_theme(style="darkgrid", palette="husl")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

4.2 用 Matplotlib 绘图(对比用)**
以前我们 Day4 用的方式:手动设置颜色、网格、字体、图例......代码又臭又长。
4.3 用 Seaborn 绘图(推荐写法)**
Seaborn 自动接管一切统计 + 美学:
python
sns.countplot(data=train, x="Pclass", hue="Survived", palette="husl")
4.4 其他常见 Seaborn 图表(全部实战过)**
countplot (人数统计)------ 4 个 Demo 已跑通
barplot (平均值 + 误差棒)------ 生存率、票价对比
violinplot (小提琴图)------ 本期最重点!Basic 3步 + Demo 3个 + swarm 叠加真实点 + FacetGrid 多面板
heatmap (相关性热力图)
jointplot / pairplot (联合分布)
catplot(网格图,最强大仪表盘)
4.4.1、countplot(计数统计图)------场景:人数分布分析**
业务场景 :产品经理看"不同用户群体人数"(舱位/港口/性别人数)
方法 :sns.countplot
关键参数调优(复杂版):
hue=分组染色order=手动排序(避免乱序)orient='h'横向(标签长时必用)palette=配色
完整代码 (day05_03_basic_countplot.py 已更新):
python
sns.countplot(data=train, x="Pclass", hue="Survived",
palette="husl", order=[1,2,3])
plt.title("不同舱位生存 vs 死亡人数")
plt.xlabel("舱位等级")
plt.ylabel("人数")

4.4.2、barplot(条形图)------场景:平均值/KPI对比**
业务场景 :老板要看"不同组的平均生存率/平均票价"
方法 :sns.barplot
关键参数调优(复杂版):
y=数值列(自动算均值)hue=多维度对比estimator=np.mean(默认)或np.medianci=95误差棒置信区间errwidth=2加粗误差棒
完整代码 (day05_03_demo_barplot.py):
python
sns.barplot(data=train, x="Pclass", y="Fare", hue="Survived",
palette="Set2", estimator=np.median, ci=95, errwidth=2)

4.4.3、violinplot(小提琴图)------场景:分布密度深度分析(本期核心)**
业务场景 :数据分析师看"年龄/票价在不同组的完整分布 (中位数、四分位、密度、极端值)",比 boxplot 信息量多 3 倍
方法 :sns.violinplot + sns.swarmplot 叠加真实点
关键参数调优(复杂版,已在 GitHub 演示):
split=True:左右分开(生存 vs 死亡)inner="quart"/None:四分位线 / 关闭(留空间给 swarm)scale="count"/"width":宽度按人数 / 统一cut=0:不超出实际数据范围dodge=True+alpha=0.7+size=3(swarm 参数)scale_hue=False(高级:不按 hue 缩放宽度)
Basic 最终版代码 (day05_04_basic_violinplot_03.py):
python
sns.violinplot(data=train, x="Pclass", y="Age", hue="Survived",
split=True, inner="quart", scale="count", cut=0, palette="husl")

Demo 2 叠加真实点 (day05_04_demo2_violinplot.py 最复杂):
python
sns.violinplot(..., inner=None, scale="count")
sns.swarmplot(..., dodge=True, size=3, alpha=0.7)

Demo 3 多面板 (day05_04_demo3_violinplot.py):
python
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
sns.violinplot(..., ax=axes[0]) # 年龄
sns.violinplot(..., ax=axes[1]) # 票价

5、新增:高级综合仪表盘(FacetGrid + catplot 多面板)------最复杂场景**
业务场景 :老板/产品总监要同时 看"舱位 × 港口 × 性别"的年龄分布(一图看清 3 个维度)
方法 :sns.catplot(kind="violin") 或 FacetGrid.map(更灵活)
关键参数调优(超级复杂版):
col="Embarked",row="Sex"(多面板网格)kind="violin",col_wrap=3height=4,aspect=1.2(控制面板大小)sharey=False(不同面板 y 轴独立)hue="Survived",split=True,inner="quart",scale="count"
完整代码 (已推送到 day05_05_facetgrid_violin.py):
python
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
matplotlib.use('TkAgg')
train = pd.read_csv('../data/titanic.csv')
sns.set_theme(style="darkgrid", palette="husl")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
g = sns.catplot(data=train,
x="Pclass",
y="Age",
hue="Survived",
col="Embarked",
row="Sex",
kind="violin",
split=True,
inner="quart",
scale="count",
height=4,
aspect=1.2,
sharey=False,
palette="husl")
g.set_titles("港口: {col_name} | 性别: {row_name}")
g.fig.suptitle("高级仪表盘:舱位×港口×性别年龄分布(生存对比)", y=1.02)
plt.show()
plt.savefig('violinplot_facetgrid_dashboard.png', dpi=300, bbox_inches='tight')
6、扩展:相关性热力图(heatmap)**
业务场景 :特征工程前看"哪些变量最相关"(面试/老板必问)
方法 :sns.heatmap
参数 :annot=True, cmap="RdBu_r", center=0, linewidths=0.5
代码 (day05_06_heatmap.py):
python
corr = train[['Survived','Pclass','Age','Fare','SibSp','Parch']].corr()
sns.heatmap(corr, annot=True, cmap="RdBu_r", center=0, linewidths=0.5)

6.1 使用建议(踩坑全记录)
- 主题推荐:
darkgrid + husl(最专业) - 中文乱码必加两行 rcParams
- 保存高清图:
plt.savefig('xxx.png', dpi=300, bbox_inches='tight') - VS Code 不弹窗:加
matplotlib.use('TkAgg') - swarmplot 点太密:加
size=3, alpha=0.7
7. 常见图表的选择(业务场景全覆盖)**
7.1 趋势 / 关系 → jointplot & pairplot**
看年龄与票价的联合分布:
python
sns.jointplot(data=train, x="Age", y="Fare", hue="Survived", kind="scatter")
7.2 对比 → barplot / countplot**
老板 KPI 图必备:
python
sns.barplot(data=train, x="Pclass", y="Survived", hue="Sex", palette="husl")
7.3 分布 → violinplot(重头戏)**
比箱线图信息量多 3 倍!
- Basic 3步(split、inner、scale)
- Demo 1(票价分布)
- Demo 2(violin + swarm 叠加真实乘客点)
- Demo 3(多子图 + 港口对比)
- 终极:FacetGrid 多面板仪表盘(舱位×港口×性别同时看)
完整 FacetGrid 代码(最复杂最实用):
python
g = sns.catplot(data=train, x="Pclass", y="Age", hue="Survived",
col="Embarked", row="Sex", kind="violin",
split=True, inner="quart", scale="count",
height=4, aspect=1.2, sharey=False)
总结
Seaborn 让可视化从"技术展示"彻底升级为"业务洞察武器"。
从今天起,你画的每一张图都能让老板 3 秒看懂、直接决策!
完整代码仓库 (已同步最新推送):
https://github.com/codeInbpm/ML-Learning-Journey-2025/tree/main/05_seaborn_basics
(所有 basic/demo/facetgrid 文件可直接运行)