SuperAPI AI 工具集

seaborn

数据与分析

查看项目

更新于 10-21 19:52

技能介绍

Seaborn 是一个 Python 统计可视化库,用于创建出版级质量的统计图形。它适合面向数据集的绘图、多变量分析、自动统计估计以及用极简代码构建复杂多面板图形。

设计理念 Seaborn 遵循以下核心原则:面向数据集,直接使用 DataFrame 和具名变量而非抽象坐标;语义映射,自动将数据值转换为视觉属性(颜色、大小、样式);统计感知,内置聚合、误差估计和置信区间;美观默认值,开箱即用的出版级主题和调色板;matplotlib 集成,需要时可完全兼容 matplotlib 自定义。

快速开始 import seaborn as sns import matplotlib.pyplot as plt import pandas as pd

加载示例数据集

df = sns.load_dataset('tips')

创建简单可视化

sns.scatterplot(data=df, x='total_bill', y='tip', hue='day') plt.show()

核心绘图接口 函数接口(传统):按可视化类型组织专用绘图函数。每个类别都有轴级函数(绘制到单个坐标轴)和图形级函数(管理整个图形并支持分面)。适用于快速探索性分析、单一用途可视化、需要特定图形类型时。

对象接口(现代):seaborn.objects 接口提供类似 ggplot2 的声明式、可组合 API。通过链式方法指定数据映射、标记、变换和标度来构建可视化。适用于复杂分层可视化、需要对变换进行细粒度控制、构建自定义图形类型、程序化生成图形。

from seaborn import objects as so

声明式语法

( so.Plot(data=df, x='total_bill', y='tip') .add(so.Dot(), color='day') .add(so.Line(), so.PolyFit()) )

按类别划分的绘图函数 关系图(变量间关系):用于探索两个或多个变量之间的关系。scatterplot() 以点显示单个观测;lineplot() 显示趋势和变化(自动聚合并计算置信区间);relplot() 图形级接口,支持自动分面。关键参数:x、y 主变量;hue 颜色编码;size 大小编码;style 标记/线型编码;col、row 分面(仅图形级)。

分布图(单变量和双变量分布):用于理解数据分布范围、形状和概率密度。histplot() 基于柱的频率分布,支持灵活分箱;kdeplot() 使用高斯核的平滑密度估计;ecdfplot() 经验累积分布(无需调参);rugplot() 单个观测刻度标记;displot() 图形级接口,支持单变量和双变量分布;jointplot() 双变量图及边缘分布;pairplot() 数据集成对关系矩阵。关键参数:x、y 变量;hue 按类别分离分布;stat 归一化方式;bins/binwidth 直方图分箱控制;bw_adjust KDE 带宽乘数;fill 填充曲线下面积;multiple 处理 hue 的方式。

分类图(跨类别比较):用于比较离散类别间的分布或统计量。分类散点图:stripplot() 带抖动的点显示所有观测;swarmplot() 不重叠点(蜂群算法)。分布比较:boxplot() 四分位数和离群值;violinplot() KDE 加四分位信息;boxenplot() 增强箱线图,适合较大数据集。统计估计:barplot() 均值/聚合及置信区间;pointplot() 点估计及连接线;countplot() 每类别观测计数。图形级:catplot() 分面分类图(设置 kind 参数)。关键参数:x、y 变量;hue 额外分类分组;order、hue_order 控制类别顺序;dodge 并排分离 hue 水平;orient 方向;kind catplot 的图形类型。

回归图(线性关系):用于可视化线性回归和残差。regplot() 轴级回归图,散点加拟合线;lmplot() 图形级,支持分面;residplot() 残差图,评估模型拟合。关键参数:x、y 回归变量;order 多项式回归阶数;logistic 拟合逻辑回归;robust 使用稳健回归;ci 置信区间宽度(默认 95);scatter_kws、line_kws 自定义散点和线属性。

矩阵图(矩形数据):用于可视化矩阵、相关性和网格结构数据。heatmap() 颜色编码矩阵并支持标注;clustermap() 层次聚类热图。关键参数:data 二维矩形数据集;annot 在单元格显示值;fmt 标注格式字符串;cmap 颜色映射名称;center 颜色映射中心值;vmin、vmax 颜色标度范围;square 强制方形单元格;linewidths 单元格间隙。

多图网格 Seaborn 提供网格对象创建复杂多面板图形:FacetGrid 基于分类变量创建子图,通常通过图形级函数调用,也可直接用于自定义图形;PairGrid 显示数据集中所有变量间的成对关系;JointGrid 结合双变量图和边缘分布。

图形级与轴级函数 理解这一区别对有效使用 seaborn 至关重要。轴级函数:绘制到单个 matplotlib Axes 对象;易于集成到复杂 matplotlib 图形;接受 ax= 参数精确放置;返回 Axes 对象。示例:scatterplot、histplot、boxplot、regplot、heatmap。适用于构建自定义多图布局、组合不同图形类型、需要 matplotlib 级控制、与现有 matplotlib 代码集成。图形级函数:管理整个图形包括所有子图;通过 col 和 row 参数内置分面;返回 FacetGrid、JointGrid 或 PairGrid 对象;使用 height 和 aspect 调整尺寸(每个子图);不能放入现有图形。示例:relplot、displot、catplot、lmplot、jointplot、pairplot。适用于分面可视化(小倍数)、快速探索性分析、一致的多面板布局、无需与其他图形类型组合。

数据结构要求 长格式数据(首选):每个变量是一列,每个观测是一行。这种“整洁”格式提供最大灵活性,适用于所有 seaborn 函数,易于将变量重新映射到视觉属性,支持任意复杂度,适合 DataFrame 操作。宽格式数据:变量分散在各列。适用于简单时间序列、相关矩阵、热图、数组数据的快速绘图。宽转长:df_long = df.melt(var_name='condition', value_name='measurement')

调色板 Seaborn 为不同数据类型提供精心设计的调色板。定性调色板(分类数据):通过色相变化区分类别,包括 "deep"、"muted"、"pastel"、"bright"、"dark"、"colorblind"。顺序调色板(有序数据):显示从低到高的进展,包括 "rocket"、"mako"、"flare"、"crest"、"viridis"、"magma"、"plasma"。发散调色板(居中数据):强调偏离中点,包括 "vlag"、"icefire"、"coolwarm"、"Spectral"。自定义调色板:sns.color_palette("husl", 8)、sns.light_palette("seagreen", as_cmap=True)、sns.diverging_palette(250, 10, as_cmap=True)。

主题与美学 set_theme() 控制整体外观。样式控制背景和网格外观:"darkgrid"(默认)、"whitegrid"、"dark"、"white"、"ticks"。上下文按用例缩放元素:"paper"(默认)、"notebook"、"talk"、"poster"。

最佳实践

  1. 数据准备:始终使用结构良好、列名有意义的 DataFrame。2. 选择正确图形类型:连续 x 连续 y 用 scatterplot、lineplot、kdeplot、regplot;连续 x 分类 y 用 violinplot、boxplot、stripplot、swarmplot;单个连续变量用 histplot、kdeplot、ecdfplot;相关性/矩阵用 heatmap、clustermap;成对关系用 pairplot、jointplot。3. 使用图形级函数进行分面。4. 利用语义映射:使用 hue、size 和 style 编码额外维度。5. 控制统计估计:许多函数自动计算统计量,理解并自定义。6. 与 matplotlib 结合进行微调。7. 保存高质量图形:fig.savefig('figure.png', dpi=300, bbox_inches='tight')。

常见模式 探索性数据分析:sns.pairplot(data=df, hue='target', corner=True);sns.displot(data=df, x='variable', hue='group', kind='kde', fill=True, col='category');相关分析 sns.heatmap(corr, annot=True, cmap='coolwarm', center=0)。出版级图形:设置主题和上下文,使用 catplot 分面,设置轴标签和标题,保存为 PDF。复杂多面板图形:使用 matplotlib subplots 结合 seaborn 轴级函数。