小新第一天走进一家数据分析公司的“统计后厨”,他惊讶地发现,这里没有传统厨房里锅碗瓢盆的喧闹,而是站着三位气定神闲的大厨。1号大厨 relplot 专管“两个变量有没有关系”,2号大厨 catplot 专管“不同类别之间的差异有多大”,3号大厨 displot 专管“数据长什么样、是集中还是分散”。小新问带他的师傅:“要画一张图,是不是得先洗菜、切菜、生火、倒油?”师傅笑了:“那是 Matplotlib 的苦力活。在 Seaborn 的厨房里,你只要把食材(整理好的长表数据)往料理台上一放,报一声菜名,大厨们就自动完成分组、聚合、摆盘——甚至把误差棒和回归线都配好了。” 在 Python 数据科学栈里,Seaborn 正是这样一位“统计主厨”:它把复杂的统计绘图逻辑封装成一行代码,让数据分析师把精力放在“看什么”而不是“怎么画”上。这篇文章就用这个后厨比喻,带你认识三大接口、分面绘图、配色主题和统计估计,从此告别“画图两小时、改图一上午”的苦日子。

岗位关联

对 AI 从业者而言,Seaborn 是数据探索和结果汇报的“加速器”:模型训练前用一行代码看清特征分布与相关性,训练后快速产出带置信区间的对比图,让每一步决策都有图可依。

目录
  1. 可视化演示
  2. 三大接口总览
  3. 数据整形之道
  4. 统计估计原理
  5. 分面绘图布局
  6. 配色方案体系
  7. 主题样式管理
  8. 回归模型拟合
  9. 图例控制技巧
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示Seaborn的relplot(关系图)、catplot(分类图)、displot(分布图)三大核心接口及其支持的图表类型,附带分面(Facet)、置信区间(CI)、色调(Hue)特性。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Seaborn统计可视化 relplot:关系图(line/scatter),catplot:分类图(box/bar),displot:分布图(hist/kde) sns.relplot(data, x, y, hue, col) 一行代码出图,自动处理统计估计、置信区间和分面绘图

三大接口总览

小新第一天站在“统计后厨”里,发现这里有三口灶台,三位大厨各管一摊。1号大厨 relplot 最擅长回答“两个变量有没有关系”——点开散点图,密密麻麻的点像撒在案板上的芝麻,一眼看出销量和广告费是否一起涨;2号大厨 catplot 喜欢把食材按类别摆盘,柱状图、箱线图轮番上阵,专门比较“男生组 vs 女生组”谁吃得多;3号大厨 displot 则负责展示数据本身的“身材”,直方图、密度曲线一画,数据是胖是瘦、是集中还是分散,一目了然。

这三位大厨其实共用一套“后厨标准作业流程”(figure-level 设计)。你只需把整洁的表格数据往台面一放,指定 x 轴、y 轴和数据来源,剩下的分组、聚合、渲染全部自动完成。它们的底层是 Matplotlib 工坊(axes-level 函数),但把那些锅碗瓢盆全封装进了菜谱里。想换图型?不用换厨房,改一个 kind 参数即可:relplot 可以换 scatter 散点或 line 折线;catplot 可以换 bar、box、violin;displot 可以换 hist 直方图、kde 密度曲线、ecdf 累积分布。

三位大厨做柱状图时,默认会对每个类别计算平均值——这就是“统计估计”的雏形。假设第 \( i \) 个类别下有 \( n_i \) 个样本,Seaborn 会先加总再平均:

回到后厨现场:小新发现,自己只要说“来一份按星期分组的消费柱状图”,2号大厨三秒钟就把菜端上来了——这就是 Seaborn 的承诺:少写代码,多出图,把统计逻辑交给主厨。

y^i=1ni∑j=1niyij\displaystyle \hat{y}_i = \frac{1}{n_i}\sum_{j=1}^{n_i} y_{ij}
  1. 认识类别下标\( i \) 是类别编号,比如“周一、周二、周三”,每个类别都有一个自己的平均值。
    i∈{1,2,…,m}i \in \{1, 2, \dots, m\}
  2. 组内求和把第 \( i \) 个类别里的所有样本值 \( y_{ij} \) 加总起来,这是求平均的第一步。
    ∑j=1niyij\sum_{j=1}^{n_i} y_{ij}
  3. 除以样本量用总和除以该组样本个数 \( n_i \),得到该组的算术平均。
    1ni∑j=1niyij\frac{1}{n_i} \sum_{j=1}^{n_i} y_{ij}
  4. 整体含义\( \hat{y}_i \) 就是第 \( i \) 类的中心位置,也是柱状图柱子的高度。
    y^i=1ni∑j=1niyij\hat{y}_i = \frac{1}{n_i}\sum_{j=1}^{n_i} y_{ij}

数据整形之道

后厨里有个规矩:备菜间只认“长条餐台”。所谓长条餐台,就是每张餐位(每一行)只放一道独立的菜(一个观测样本),每列只放一种配料(一个变量)。这叫做整洁数据(tidy data)。与之相对的“宽盘大拼盘”(宽表)虽然看着丰富——一列一个类别、一行一个时间点——但主厨们反而不会处理。小新第一天就把一张宽表端上来,三位大厨集体摇头:“这没法下锅。”

解决办法是用 pandas 的 melt 方法给数据“改刀”。把宽表里那些并列的类别列(比如“周一消费、周二消费、周三消费”)融化成一列“星期”和一列“消费金额”。改刀之后,每一行都变成“某一天、某笔消费”这样标准的小菜。Seaborn 的所有高级接口都默认吃这种长桌备菜,所以数据整形是出图前的第一道工序。

那长表到底比宽表多出多少行?假设你的宽表有 \( R \) 行,你要把 \( V \) 个类别列融化成长表,长表的行数就是:

用后厨的话说:一张大拼盘改刀成 90 份独立小菜,虽然盘子多了,但每盘只有一种主料、一种配料,主厨一看就知道怎么炒。磨刀不误砍柴工,melt 这步做对了,后面所有图都能一行代码搞定。

Rlong=R×V\displaystyle R_{\text{long}} = R \times V
  1. 原始行数\( R \) 是宽表原本的行数,比如 30 个用户,就是 30 行。
    R=30R = 30
  2. 融化列数\( V \) 是你选择融化的变量列数量,比如把周一到周三三列都融化,\( V = 3 \)。
    V=3V = 3
  3. 相乘得长表行数宽表每行都会因为融化而“复制”出 \( V \) 行,所以总行数变成 \( R \times V \)。
    Rlong=R×V=90R_{\text{long}} = R \times V = 90

统计估计原理

小新发现,2号大厨 catplot 端出来的柱状图,每根柱子上都顶着一条小竖线,像烤串的竹签一样。他问师傅:“这是摆盘装饰吗?”师傅说:“这是误差棒,是主厨对这道菜分量波动范围的估算。”Seaborn 默认使用自助法(bootstrap)生成置信区间:反复从数据里抽取样本,计算成千上万次平均值,最后圈出中间 95% 的范围。

这背后的统计逻辑并不复杂。如果你有一组样本,想知道总体的平均分量大致落在哪个区间,可以先算出样本均值 \( \bar{x} \) 和样本标准差 \( s \),再用 t 分布给出一个带置信水平的区间:

师傅看小新似懂非懂,又补了一句:误差棒不是“所有数据都会落在这个范围内”,而是“我们有 95% 的把握说,真正的总体均值落在这个区间里”。就像主厨说“这道菜分量在 200 到 220 克之间”,并不是说每盘菜都恰好 210 克,而是说标准配方就是这个范围。Seaborn 替你把这段统计计算全包了,你要做的只是看误差棒是否重叠——重叠,两组差异可能不显著;不重叠,差异大概率真实存在。

CI=xˉ±t0.975,n−1∗×sn\displaystyle \text{CI} = \bar{x} \pm t^{*}_{0.975, n-1} \times \frac{s}{\sqrt{n}}
  1. 样本均值\( \bar{x} \) 是所有观测值的平均,它是区间中心的估计值。
    xˉ=1n∑i=1nxi\bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i
  2. 标准误差\( s / \sqrt{n} \) 是“均值估计的波动幅度”——样本量越大,这个波动越小,区间越窄。
    SE=sn\text{SE} = \frac{s}{\sqrt{n}}
  3. t 临界值\( t^{*}_{0.975, n-1} \) 是根据置信水平(95%)和自由度(\( n-1 \))查表得到的系数,相当于把范围放宽一些的“安全倍数”。
    t0.975,n−1∗≈2t^{*}_{0.975, n-1} \approx 2
  4. 完整区间均值加减临界值乘标准误差,得到一个下界和一个上界,这就是误差棒覆盖的范围。
    CI=[xˉ−t∗×SE,  xˉ+t∗×SE]\text{CI} = [\bar{x} - t^* \times \text{SE}, \; \bar{x} + t^* \times \text{SE}]

分面绘图布局

小新的师傅决定考考他:“如果我想看不同星期、不同性别下的消费关系,怎么办?”小新刚要拿起 Matplotlib 写两层循环,师傅拦住他:“Seaborn 有更省力的办法——分面(facet)。”这就像宴会摆桌:一张大长桌按行和列切成若干小桌,每张小桌放同一类客人,食客按桌牌找自己的位置。col 参数决定分成几列,row 参数决定分成几行,一个数据框里的字段就自动把数据分到各个小图里。

分面的好处是“对比结构清晰”:小图共享同样的坐标系和刻度,此消彼长一目了然。当你同时使用 row 和 col 时,总的面板数量就是两者的乘积:

分面之后还要注意“共享刻度”的问题。默认情况下,各小图的坐标轴范围是独立的;如果想让它们共用同一套刻度,方便横向对比,就设置 sharex=True, sharey=True。这相当于宴会厅里所有小桌统一用一样的桌布和盘碟——数据之间的高低胖瘦才能公平比较。

Nfacet=nrow×ncol\displaystyle N_{\text{facet}} = n_{\text{row}} \times n_{\text{col}}
  1. 行方向分面数\( n_{\text{row}} \) 是传给 row 参数的类别数量,比如 sex 有两个取值,则 \( n_{\text{row}} = 2 \)。
    nrow=2n_{\text{row}} = 2
  2. 列方向分面数\( n_{\text{col}} \) 是传给 col 参数的类别数量,比如 day 有四个取值,则 \( n_{\text{col}} = 4 \)。
    ncol=4n_{\text{col}} = 4
  3. 总图数乘法原理,行数乘以列数得到小图总数。
    Nfacet=2×4=8N_{\text{facet}} = 2 \times 4 = 8

配色方案体系

后厨的餐厅正在装修,师傅问小新:“你喜欢什么风格?冷淡北欧风,还是热情地中海风?”Seaborn 里也有一个“装修色板库”——调色板(palette)。当你用 hue 参数给不同类别分配颜色时,Seaborn 会自动从当前色板中取色。默认的 deep 色板就像后厨的标准围裙,沉稳耐看;换成 bright 则像节日彩带,鲜艳跳跃;还有专门为色盲人群设计的 colorblind 色板,保证红绿不混淆。

如果 hue 指向的是一个连续数值列(比如价格、年龄),Seaborn 会生成一条从浅到深的连续渐变色带。这在视觉上等价于把色相环上的颜色按比例插值:假设总渐变跨度是 120°,某个数据点的相对位置是 \( s \),它对应的色相就是:

如果觉得默认色板不够用,还可以用 palette 参数直接传入自己定义的颜色列表,甚至使用 matplotlib 的 colormap。这就像餐厅老板直接指定“墙面用莫兰迪灰绿、桌布用奶油白”——菜单的颜色哲学完全由你掌控。

H(s)=H0+s×120∘\displaystyle H(s) = H_0 + s \times 120^{\circ}
  1. 起始色相\( H_0 \) 是渐变的起始颜色角度,比如从蓝色区域开始,\( H_0 = 220^\circ \)。
    H0=220∘H_0 = 220^{\circ}
  2. 相对位置\( s \) 是当前数值在最大值和最小值之间的相对位置,取值从 0 到 1。
    s=x−xmin⁡xmax⁡−xmin⁡s = \frac{x - x_{\min}}{x_{\max} - x_{\min}}
  3. 线性映射把相对位置乘以渐变跨度,再加到起始角度上,得到该点的最终色相。
    H(s)=220∘+s×120∘H(s) = 220^{\circ} + s \times 120^{\circ}

主题样式管理

配色是装修,那么主题(theme)就是整个餐厅的“氛围灯光”:同样的菜,在暖黄灯光下显得温馨,在白炽灯下显得清爽。Seaborn 的 set_theme() 就是那个一键调整全局氛围的开关。style="darkgrid" 像夜间酒吧,深色背景配网格,适合投影汇报;style="whitegrid" 像白天咖啡馆,白底浅网格,印在纸上最干净;还有 ticks 风格,只在坐标轴上有刻度线,像高端日料店的极简摆盘。

除了氛围,还有“音量”调节——set_context()。它控制字体大小、线条粗细和标签间距的整体缩放。默认 notebook 适合屏幕阅读,paper 适合印刷论文,talk 适合演讲投影,poster 适合大幅海报。内部实现就是给所有尺寸乘上一个统一的缩放因子:

后厨里有一句话:“好图是设计出来的,不是代码堆出来的。”set_theme 和 set_context 让你不用一行行去调 plt.rcParams,而是像调餐厅灯光一样,选一个氛围,整屋自动匹配。

Sfinal=Sbase×α\displaystyle S_{\text{final}} = S_{\text{base}} \times \alpha
  1. 基础尺寸\( S_{\text{base}} \) 是 Seaborn 内部的基准字号,比如默认的 10 磅。
    Sbase=10S_{\text{base}} = 10
  2. 缩放因子\( \alpha \) 是上下文预设给出的缩放比例,paper 约为 0.8,talk 约为 1.2。
    αtalk=1.2\alpha_{\text{talk}} = 1.2
  3. 最终生效尺寸基础字号乘以缩放因子,得到画布上实际使用的字号。
    Sfinal=10×1.2=12S_{\text{final}} = 10 \times 1.2 = 12

回归模型拟合

小新看 1 号大厨 relplot 画散点图时,发现图上自动多了一条平滑的斜线,像一根串起所有芝麻的竹签。师傅说:“这是营养师的配餐线——回归线。它把两个变量之间的关系浓缩成一条直线,告诉你 x 每增加一个单位,y 平均增加多少。”Seaborn 里 lmplot 就是这位营养师的专用灶台,它把散点图和线性回归打包成一道菜,还顺手画出置信区间阴影带。

这条回归线不是随手画的,而是遵循“最小二乘”原则:希望所有数据点到这条线的垂直距离(残差)的平方和最小。用数学语言说,就是寻找 \( \beta_0 \) 和 \( \beta_1 \) 使得:

如果想让营养师检查“配餐是否合理”,还可以用 residplot 画残差图——把每个点的残差画在横轴两侧。残差随机分布在零线附近,说明直线拟合良好;如果残差呈现出弯曲的喇叭状,说明数据可能不是线性的,该换一位“曲线大厨”了。

min⁡β0,β1∑i=1n(yi−y^i)2,y^i=β0+β1xi\displaystyle \min_{\beta_0, \beta_1} \sum_{i=1}^{n} \left( y_i - \hat{y}_i \right)^2, \quad \hat{y}_i = \beta_0 + \beta_1 x_i
  1. 回归方程\( \hat{y}_i = \beta_0 + \beta_1 x_i \) 是拟合直线,\( \beta_0 \) 是截距,\( \beta_1 \) 是斜率。
    y^i=β0+β1xi\hat{y}_i = \beta_0 + \beta_1 x_i
  2. 残差定义每个数据点的真实值 \( y_i \) 与预测值 \( \hat{y}_i \) 的差,就是该点到直线的垂直偏差。
    ϵi=yi−y^i\epsilon_i = y_i - \hat{y}_i
  3. 平方求和把每个残差平方后加总,平方是为了让正负偏差不互相抵消。
    ∑i=1nϵi2=∑i=1n(yi−y^i)2\sum_{i=1}^{n} \epsilon_i^2 = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
  4. 最小化目标找到一组 \( \beta_0, \beta_1 \) 使这个总和最小,这组参数就是回归线的最佳位置。
    min⁡β0,β1∑i=1n(yi−y^i)2\min_{\beta_0, \beta_1} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2

图例控制技巧

最后一道工序是摆菜单。想象一下,满桌子的菜都用不同颜色的盘子装着,如果不在旁边放一个说明牌,食客根本分不清哪个颜色是牛肉、哪个颜色是豆腐。Seaborn 自动生成的图例(legend)就是这个说明牌,它会把你 hue 指定的类别变量和颜色一一对应列出来。

图例控制有两个最常用的旋钮:legend 控制开关,legend=False 相当于撤掉菜单牌,适合图已经很直观、不需要说明的场景;legend='auto' 是默认值,有类别就自动生成。想微调菜单牌的位置?可以用 plt.legend(loc='upper left') 这样的底层 Matplotlib 命令,把它挪到图外或者某个角落,避免遮挡数据。

图例的条目数实际上就是 hue 变量的类别个数。假如 hue="sex",数据集里只有“Male“和”Female”两类,那么图例里就有两个条目:

小新终于明白了:一张好图就像一桌好宴,数据是菜料,主题是灯光,图例是菜单牌。Seaborn 把后厨所有琐碎的杂活都包办了,他要做的只是学会点菜——以及知道每道菜的脾气。

K=∣{h1,h2,…,hm}∣\displaystyle K = \left| \{ h_1, h_2, \dots, h_m \} \right|
  1. 类别集合\( \{ h_1, h_2, \dots, h_m \} \) 是 hue 列里所有不重复的取值,比如 {"Male", "Female"}。
    {h1,h2}={Male,Female}\{ h_1, h_2 \} = \{ \text{Male}, \text{Female} \}
  2. 集合大小\( |\cdot| \) 表示集合的基数,即不重复元素的个数。
    ∣{Male,Female}∣=2|\{ \text{Male}, \text{Female} \}| = 2
  3. 图例条目数\( K \) 等于类别个数,每个条目对应一种颜色和一个标签。
    K=2K = 2

AI 应用场景

电商运营日报:用 catplot 对比渠道转化率

阶段:业务数据探索与报告

解决的问题:运营团队每周要对比五个渠道的点击转化率,传统做法是在 Excel 里手动做透视表,再插入柱状图,还要自己算误差范围,光整理就花一下午。Seaborn 的 catplot 一行代码就能按渠道分组画出带置信区间误差棒的柱状图,并自动完成均值聚合。

具体案例:某电商公司用 sns.catplot(data=df, x="channel", y="conversion_rate", kind="bar") 对比各渠道表现。图一出来就发现“短信渠道”的误差棒特别长,说明该渠道数据波动极大,进一步查看原始数据后发现是节假日促销造成的异常,及时调整了投放策略。

A/B 测试结果汇报:用 relplot + displot 双图论证

阶段:实验结果评估与可视化汇报

解决的问题:算法工程师做完推荐系统 A/B 实验后,要给业务方讲清楚“新算法到底有没有提升点击率”。单纯丢一个 p 值很难说服人,用 relplot 画实验组和对照组在时间维度上的点击率趋势,再用 displot 并排展示两组用户的点击量分布,直观又有说服力。

具体案例:某内容平台 A/B 实验中,relplot 的趋势线显示新算法在前三天提升明显但后两天回落;displot 的分布图则显示新算法把“重度用户”的点击量推得更高。最终团队判断新算法对头部用户有效,决定针对活跃用户分桶上线。

用户分群画像:用分面柱状图讲清人群差异

阶段:特征探索与用户洞察

解决的问题:用户画像项目里,分析师想快速了解“不同年龄段、不同会员等级的用户消费差异”。传统做法要写多层分组聚合代码,再手动拼接多个子图。Seaborn 的分面功能用 col="age_group", row="membership" 自动生成 3×3 网格图,每个格子一个群体的消费分布。

具体案例:某零售企业用分面图发现“25 岁以下、普通会员”群体虽然客单价低,但购买频次最高;而“45 岁以上、金卡会员”恰好相反。据此设计了差异化运营策略:针对年轻群体推高频低价商品,针对高龄金卡会员推高客单精品。

Python 演示

python46 行
import seaborn as snsimport matplotlib.pyplot as plt sns.set_theme(style="whitegrid", palette="muted")sns.set_context("notebook") tips = sns.load_dataset("tips")print(tips.head()) # 1. relplot: 关系图 + 线性回归趋势sns.relplot(    data=tips,    x="total_bill", y="tip",    hue="time",    size="size",    sizes=(40, 200),) # 2. catplot: 类别对比 + 置信区间误差棒sns.catplot(    data=tips,    x="day", y="total_bill",    hue="sex",    kind="bar",) # 3. displot: 分布图 + 密度曲线 + 分面sns.displot(    data=tips,    x="total_bill",    hue="time",    kind="kde",    col="day",    col_wrap=2,    fill=True,) # 4. lmplot: 回归拟合 + 分面sns.lmplot(    data=tips,    x="total_bill", y="tip",    col="time",    hue="smoker",) plt.show()
目的:用 Seaborn 三大接口全面探索小费数据集——先看整体关系,再对比类别差异,最后观察分布与回归趋势。
  1. sns.set_theme(style="whitegrid", palette="muted")一键设定全局主题风格和调色板,相当于后厨统一了灯光与围裙。
  2. sns.relplot(data=tips, x="total_bill", y="tip", hue="time", size="size")关系大厨出图:散点颜色区分用餐时段,点的大小表示聚餐人数,一行代码涵盖三个维度的信息。
  3. sns.catplot(data=tips, x="day", y="total_bill", hue="sex", kind="bar")类别大厨出图:按星期分组、按性别分色,自动计算均值并画出置信区间误差棒。
  4. sns.displot(data=tips, x="total_bill", hue="time", kind="kde", col="day")分布大厨出图:密度曲线按午餐/晚餐分色,再按星期分面成两列网格,一张图装下多维分布信息。
  5. sns.lmplot(data=tips, x="total_bill", y="tip", col="time", hue="smoker")营养师出图:散点加回归线,按时段分面,同时用颜色区分是否吸烟,拟合趋势一目了然。

常见误区

误区“学会了 Seaborn,就不用学 Matplotlib 了,反正所有图都能用 Seaborn 画。”

正解Seaborn 是站在 Matplotlib 肩膀上的“主厨”,它负责把常用统计图做得又快又好,但底层依然是 Matplotlib 的画布。复杂的自定义布局、特殊标注、精细排版都需要回到 Matplotlib 去调整。更准确的说法是:用 Seaborn 出图,用 Matplotlib 修图。

为何常见:因为 Seaborn 的一行代码确实能替代 Matplotlib 的十几行,初学者容易产生“后者无用”的错觉。

误区“我把宽表直接传给 relplot,为什么 hue 不生效?一定是 Seaborn 太死板。”

正解Seaborn 从设计上就要求整洁的长表数据——一行一个观测,一列一个变量。宽表里并列的类别列会让 hue、col 这些参数找不到对应的“变量”。用 melt 把宽表转成长表,是出图前的必备工序。后厨不是不能做菜,是你没把菜切成它要的形状。

为何常见:很多人在 Excel 思维下习惯宽表,初次接触 tidy data 理念时容易忽略这一前置步骤。

误区“柱状图上的误差棒就是数据波动的标准差范围,看到波动大就说明数据不稳定。”

正解Seaborn 的 barplot 和 catplot 默认绘制的是 95% 置信区间,而不是一个标准差。置信区间描述的是“总体均值可能落在哪里”,误差棒越窄说明对均值的估计越精确;而标准差描述的是“单个数据点分散程度”。两者含义完全不同,混用会导致结论错误。

为何常见:因为很多人先学了 Matplotlib 里的 yerr=std 习惯,看到误差棒就自动联想到标准差。

误区“我把图分成 3×2 六个小图,它们应该自动使用同样的坐标轴范围,这样我才能直接对比。”

正解分面图默认情况下各子图的坐标轴范围是独立计算的,如果某组数据量级差异大,小图之间的刻度范围可能完全不同。需要显式设置 sharex=True, sharey=True,才能让所有子图共用刻度基准。这就像宴会摆桌,默认每桌可以自己摆盘,想统一餐具就得跟主厨特别交代。

为何常见:因为很多其它绘图库的分面功能默认共享轴,而 Seaborn 对此有不同的默认行为。

面试题

Q1. 下列哪个是 Seaborn 中专用于绘制两个变量关系图的高级接口?

单选题 · easy

  • A.plt.plot
  • B.relplot← 正确答案
  • C.catplot
  • D.displot

答案:B。relplot 是 Seaborn 三大高级接口之一,专管“两个变量之间的关系”,支持散点和折线两种 kind。catplot 管类别比较,displot 管数据分布,而 plt.plot 是 Matplotlib 的底层函数。

Q2. Seaborn 官方推荐的数据组织格式是以下哪一种?

单选题 · easy

  • A.宽表
  • B.长表← 正确答案
  • C.透视表
  • D.树形表

答案:B。Seaborn 基于“整洁数据(tidy data)”理念设计,要求一行一个观测、一列一个变量,也就是长表格式。宽表需要用 melt 转换成长期,透视表和树形表更不是 Seaborn 的输入格式。

Q3. 在 pandas 中,把宽表转换为长表通常使用哪个方法?

单选题 · mid

  • A.stack
  • B.melt← 正确答案
  • C.pivot
  • D.groupby

答案:B。melt 是宽转长的标准方法,把多个并列的变量列融化成一列变量名和一列变量值。pivot 恰好相反,是长转宽。stack 也能做类似操作但语义不同,groupby 是分组聚合工具。

Q4. 关于 catplot 的 kind 参数,下列哪些是合法取值?

多选题 · mid

  • A.bar← 正确答案
  • B.box← 正确答案
  • C.violin← 正确答案
  • D.scatter

答案:ABC。catplot 面向类别型数据的比较,支持 bar、box、violin、boxen、point、count 等 kind。scatter 是 relplot 的 kind 而不是 catplot 的,属于关系图的范畴。

Q5. 下列哪个 kind 值不属于 displot 的合法选项?

单选题 · mid

  • A.hist
  • B.kde
  • C.ecdf
  • D.line← 正确答案

答案:D。displot 是分布图接口,支持 hist(直方图)、kde(核密度)、ecdf(累积分布)。line 是 relplot 中表示趋势线的 kind,不属于分布图的范畴。

Q6. Seaborn 的 barplot 和 catplot 默认绘制的误差棒对应什么统计量?

单选题 · mid

  • A.一个标准差
  • B.95% 置信区间← 正确答案
  • C.最大值与最小值
  • D.中位数绝对偏差

答案:B。Seaborn 默认使用自助法(bootstrap)估计 95% 置信区间,而不是一个标准差。置信区间表示总体均值可能落入的范围,误差棒越窄说明均值估计越精确,与单点分散程度的标准差含义不同。

Q7. 关于分面绘图,以下说法正确的是?

多选题 · hard

  • A.col 参数决定按列分面的类别← 正确答案
  • B.row 参数决定按行分面的类别← 正确答案
  • C.sharex 控制各子图是否共享 x 轴刻度← 正确答案
  • D.分面总数等于行分面数乘以列分面数← 正确答案

答案:ABCD。四个选项都对。col 和 row 分别指定列方向与行方向的分面变量;sharex 和 sharey 控制坐标轴是否统一;分面总数由乘法原理计算,即 n_row × n_col。

Q8. 若想在 Seaborn 绘图中隐藏图例,应该使用哪个参数?

单选题 · easy

  • A.legend=False← 正确答案
  • B.show=False
  • C.title=None
  • D.size=0

答案:A。legend 参数专门控制图例的显示,设置为 False 即可隐藏。show 不是 Seaborn 的图例参数,title 控制标题,size 控制点的大小或线宽,都与图例开关无关。

Q9. 在 displot 中设置 rug=True,它的作用是什么?

单选题 · hard

  • A.在坐标轴底部绘制细刻度线,标记每个观测值的精确位置← 正确答案
  • B.为直方图添加平滑的密度曲线
  • C.在图上叠加回归线
  • D.自动调整柱子的宽度

答案:A。rug 又称地毯图,会在坐标轴上为每个数据点画一条极短的竖线,呈现所有观测值的精确落点,适合数据量不大时观察样本密度。密度曲线由 kde 参数控制,回归线由 lmplot 负责,柱宽由 bins 控制。

Q10. 关于 Seaborn 的主题与上下文设置,下列说法正确的是?

多选题 · hard

  • A.set_theme 可以设置整体背景风格← 正确答案
  • B.set_context 可以调整字体大小和线条粗细← 正确答案
  • C.style 参数可选值包括 darkgrid 和 whitegrid← 正确答案
  • D.主题设置功能可以完全替代 matplotlib 的 rcParams

答案:ABC。set_theme 负责全局风格,set_context 负责缩放字体线宽,style 确实支持 darkgrid、whitegrid、ticks 等预设。但主题设置只是在更高层级封装了 matplotlib 的 rcParams,遇到极端自定义需求仍需回到 Matplotlib 层面做精细调整,因此 D 错误。