SuperAPI AI 工具集

seaborn

数据与分析

查看项目

更新于 10-16 04:03

技能介绍

Seaborn 是一个 Python 统计数据可视化库,用于创建出版级质量的统计图形。它的用途是面向数据集的绘图、多变量分析、自动统计估计,以及用少量代码创建复杂的多面板图形,并可与 pandas 深度集成。

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

核心绘图接口 函数接口(传统):按可视化类型组织专用绘图函数。每个类别都有坐标轴级函数(绘制到单个 Axes)和图形级函数(管理整个图形并进行分面)。适用于快速探索性分析、单一用途可视化以及需要特定图形类型时。 objects 接口(现代):seaborn.objects 提供类似 ggplot2 的声明式、可组合 API。通过链式方法指定数据映射、标记、变换和标度来构建可视化。适用于复杂分层可视化、需要对变换进行细粒度控制、构建自定义图形类型以及以程序方式生成图形时。

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

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

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

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

矩阵图(矩形数据):用于可视化矩阵、相关性和网格结构数据。包括 heatmap()(带注释的颜色编码矩阵)、clustermap()(层次聚类热图)。关键参数:data 为二维矩形数据集(DataFrame 或数组);annot 在单元格中显示值;fmt 为注释的格式字符串(如 ".2f");cmap 为颜色映射名称;center 为颜色映射中心的值(用于发散型颜色映射);vmin、vmax 为颜色标度范围;square 强制方形单元格;linewidths 单元格之间的间隙。

多图网格 Seaborn 提供网格对象用于创建复杂的多面板图形:FacetGrid 根据分类变量创建子图(最常通过图形级函数 relplot、displot、catplot 调用,也可直接用于自定义图形);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 操作。 宽格式数据:变量分散在各列中。适用于简单矩形数据,如简单时间序列、相关矩阵、热图、数组数据的快速绘图。

调色板 Seaborn 为不同数据类型提供精心设计的调色板。定性调色板(分类数据):通过色相变化区分类别,如 "deep"(默认,鲜艳)、"muted"(较柔和)、"pastel"(浅淡)、"bright"(高饱和)、"dark"(深色值)、"colorblind"(适合色觉缺陷)。顺序调色板(有序数据):显示从低到高的进展,如 "rocket"、"mako"(宽亮度范围,适合热图)、"flare"、"crest"(受限亮度,适合点/线)、"viridis"、"magma"、"plasma"(matplotlib 感知均匀)。发散调色板(居中数据):强调与中点的偏差,如 "vlag"(蓝到红)、"icefire"(蓝到橙)、"coolwarm"(冷到暖)、"Spectral"(彩虹发散)。也可创建自定义调色板。

主题与美学 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. 控制统计估计:许多函数自动计算统计量,应理解并自定义,如 lineplot 默认计算均值和 95% CI,barplot 默认计算均值。
  6. 与 matplotlib 结合,seaborn 可与 matplotlib 无缝集成以进行微调。
  7. 保存高质量图形,可输出 PNG(dpi=300、bbox_inches='tight')或 PDF(出版用矢量格式)。

常见模式 探索性数据分析:用 pairplot 快速总览所有关系,用 displot 探索分布,用 heatmap 做相关性分析。 出版级图形:设置主题、上下文和字体缩放,用 catplot 等生成分面图,设置坐标轴标签和标题,去除边框并保存为 PDF。 复杂多面板图形:结合 matplotlib subplots 与 seaborn 坐标轴级函数,在 2x2 网格中分别绘制散点图、直方图、小提琴图和热图。