5.3 Seaborn 统计图表与图表定制


5.3 Seaborn 统计图表与图表定制

本节摘要:Seaborn 是基于 Matplotlib 的高层统计绘图库,专为数据分析设计——它知道"直方图带核密度曲线更好看""箱线图配提琴图信息更全"。本节掌握分布图、箱线图、热力图三个主力图表,再学会主题、调色板定制,让图表既快又专业。

读前必看

阅读完本节,你应当能够:

  1. 说明 Seaborn 与 Matplotlib 的关系及互补场景
  2. 用 distplot 系函数画分布图,用 boxplot 画分组箱线图
  3. 用 heatmap 画相关矩阵热力图
  4. 用 set_theme 切换主题、设置调色板
  5. 把 Seaborn 图表与 Matplotlib 定制混用

一、问题与直觉

用 Matplotlib 画一个带核密度曲线的直方图,要手动调好几行参数;画分组箱线图,得自己按组切数据。这些"统计绘图里高频出现、又有点繁琐"的场景,Seaborn 都封装好了——传一个 DataFrame 和列名,一行出图。Seaborn 的定位不是替代 Matplotlib,而是让统计图更高效、更好看。

二、核心原理

2.1 数据感知接口

Seaborn 的接口面向 DataFrame:sns.histplot(data=df, x="金额") 直接在数据框上按列画图,自动处理缺失、自动加标签、自动分箱。它内部仍然调用 Matplotlib,所以画完还能继续用 Matplotlib 的函数做精细调整。

2.2 三个主力图表的能力

  • distplot / histplot:单变量分布,直方图加核密度曲线,偏态、双峰一眼可见
  • boxplot / violinplot:分组分布对比,中位数、四分位、离群点全在图上
  • heatmap:相关矩阵可视化,颜色深浅表达相关强度

三、工程实践要点

3.1 分布图

import seaborn as sns import matplotlib.pyplot as plt sns.histplot(df["金额"], bins=30, kde=True) # 直方图 + 核密度 plt.title("订单金额分布") plt.show()

💡 关键直觉:kde=True 加的曲线能更平滑地显示分布形状,右偏、双峰这类"均值看不见的特征",曲线上一目了然。

3.2 分组箱线图

sns.boxplot(data=df, x="门店", y="金额") sns.violinplot(data=df, x="门店", y="金额") # 提琴图:更细的分布形状

箱线图里的圆点就是离群值——比单独用统计方法检测直观得多。两三家门店一对比,"哪家客单价波动大"立刻有数。

3.3 热力图

corr = df[["金额", "订单量", "客单价", "折扣"]].corr() sns.heatmap(corr, annot=True, cmap="coolwarm", fmt=".2f") plt.title("数值特征相关矩阵") plt.show()

annot=True 在格子里显示相关系数数值,cmap 控制颜色映射。看热力图找"亮红"的格子——那就是强相关特征,也是后续建模要重点关注的。

3.4 主题与调色板

sns.set_theme(style="whitegrid") # 主题:白色背景网格 sns.set_palette("Set2") # 调色板 sns.set_theme(context="paper") # 上下文:影响字号线宽

常用主题:whitegrid(网格)、darkgrid(深色网格)、white(干净)、ticks(刻度)。调色板 Set2huslcoolwarm 等按需选。

3.5 Matplotlib 混用定制

fig, ax = plt.subplots(figsize=(8, 5)) sns.histplot(df["金额"], kde=True, ax=ax) ax.set_title("订单金额分布") ax.axvline(df["金额"].median(), color="red", linestyle="--", label="中位数") ax.legend() plt.show()

Seaborn 图表画在 Matplotlib 的 axes 上,之后一切 Matplotlib 的能力照常可用——axvline 画参考线、set_title 改标题,混用无缝。

⚠️ 常见坑:Seaborn 新版部分函数改名(如 distplot 拆成 histplot/kdeplot)。代码报"module has no attribute"时,优先查新函数名,别在旧 API 上死磕。

3.6 三套工具选型对照

需求 用哪个 为什么
快速画一张普通图 Matplotlib 轻量直接
统计图(分布/相关) Seaborn 一行出图带统计语义
精细控制每个细节 Matplotlib 全量 API
报表级美观 Seaborn + set_theme 默认配色更专业

3.7 贯穿案例:门店销售可视化套图

fig, axes = plt.subplots(1, 2, figsize=(12, 4)) # 左图:各门店销售额柱状 sns.barplot(data=df, x="门店", y="销售额", ax=axes[0]) axes[0].set_title("各门店销售额") # 右图:各门店客单价分布 sns.boxplot(data=df, x="门店", y="客单价", ax=axes[1]) axes[1].set_title("各门店客单价分布") plt.tight_layout() plt.show()

一张对比图回答两个问题:哪家卖得多、哪家单价波动大。这就是可视化在业务分析里的日常用法。

3.8 更多值得掌握的 Seaborn 图表

图表 函数 用途
计数条形图 sns.countplot(data, x="类目") 类别频次
分组散点 sns.scatterplot(data, x="金额", y="订单量", hue="门店") 多维关系
回归图 sns.regplot(data, x="金额", y="订单量") 关系+拟合线
配对图 sns.pairplot(df[数值列]) 多变量全览
联合分布 sns.jointplot(data, x, y) 双变量分布

pairplot 一次画出所有数值列两两组合的散点与分布,是 EDA 里"一图看全局"的利器——数据列不多时,用它代替逐个画图效率极高。

3.9 图表配色与可读性

配色不是玄学,直接关系信息传达:

  • 分类数据用离散调色板(Set2、husl),颜色区分不同类别
  • 数值连续用渐变(coolwarm、viridis),颜色深浅表达大小
  • 色盲友好优先选 viridis、colorblind 系列
  • 一张图里颜色别超过 5 种,超过就改用分组或缩小对比范围

⚠️ 常见坑:热力图用默认配色容易"红绿不分",色盲读者直接看不懂。相关矩阵这类连续数值,选 coolwarmRdYlBu 这类两端清晰的渐变,信息传达更可靠。

3.10 定制与保存

fig, ax = plt.subplots(figsize=(9, 5)) sns.boxplot(data=df, x="门店", y="金额", palette="Set2", ax=ax) ax.set_title("各门店金额分布") fig.savefig("门店金额分布.png", dpi=200, bbox_inches="tight") plt.show()

bbox_inches="tight" 自动裁剪多余留白,dpi=200 保证报告印刷清晰。图表保存是交付环节,尺寸和分辨率值得多花一行参数。

3.11 Seaborn 与 Matplotlib 的分工再梳理

一句话记住两者的关系:Matplotlib 是"引擎",Seaborn 是"变速箱"。引擎负责最终渲染,变速箱让统计绘图更顺手。具体分工:

  • 快速统计图(分布、箱线、热力)→ Seaborn,一行出图
  • 精细布局、特殊标注、多图组合 → Matplotlib 二次定制
  • 两者混用:Seaborn 画主体,Matplotlib 加参考线、改标题、调图例

实践中 80% 的图表用 Seaborn 起手、Matplotlib 收尾。把这套组合用熟,可视化效率至少翻倍。

3.12 可视化交付检查单

检查项 说明
图有标题 一句话说清"回答什么问题"
轴有标签 单位明确(万元、单、天)
类别有图例 系列可区分
配色合理 离散用 Set2、连续用渐变
中文正常 SimHei 已配置
分辨率够 报告用 dpi 200 以上

本章回顾

  • 要点一:Seaborn 是 Matplotlib 之上的统计绘图层,传 DataFrame 一行出图
  • 要点二:三主力——histplot 看分布、boxplot 比组间、heatmap 看相关
  • 要点三kde=True 平滑显示分布形状,双峰右偏一眼可见
  • 要点四:箱线图上的圆点就是离群值,比统计检测更直观
  • 要点五:set_theme 切换主题、set_palette 换配色,报表观感立升
  • 要点六:Seaborn 画在 Matplotlib 的 axes 上,可无缝混用定制

工具都齐了,最后一节把 EDA 流程、Matplotlib、Seaborn 拼成一次完整的实战——用电商订单数据跑一遍"从清洗到洞察"。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U