4.2 箱线、小提琴、柱状与点图


文档摘要

4.2 箱线、小提琴、柱状与点图 boxplot 用五数概括摘要分布;violinplot 把密度估计镜像成琴身;barplot 只留均值加误差棒;pointplot 用点线呈现组间变化与交互。压缩率依次升高,适用场景依次收窄。 4.1 结束在压缩光谱的零压缩端,本节走完剩余三档:形状摘要(box、violin)与统计摘要(bar、point)。 箱体构造:一屏讲清五数概括 箱体三件事立即可读:中位数线在箱内的位置给出偏态方向(贴上边说明右偏);箱高即 IQR,是离散度的稳健度量;须外的圈是超过 1.5 倍 IQR 的点,数目本身就是信息。 小提琴:密度与镜像 小提琴与箱线的分工:箱线是标准化摘要,跨组比较严格公平;

4.2 箱线、小提琴、柱状与点图

boxplot 用五数概括摘要分布;violinplot 把密度估计镜像成琴身;barplot 只留均值加误差棒;pointplot 用点线呈现组间变化与交互。压缩率依次升高,适用场景依次收窄。

4.1 结束在压缩光谱的零压缩端,本节走完剩余三档:形状摘要(box、violin)与统计摘要(bar、point)。

箱体构造:一屏讲清五数概括

import seaborn as sns import matplotlib.pyplot as plt tips = sns.load_dataset('tips') ax = sns.boxplot(data=tips, x='day', y='total_bill') ax.set_xlabel('星期') ax.set_ylabel('总消费(美元)') # 输出说明(以 Sunday 为例):箱体下边=第一四分位数 Q1,箱内横线=中位数, # 箱体上边=Q3,上下须延伸到 1.5 倍 IQR 内的最远观测,须外的空心圈=离群点

箱体三件事立即可读:中位数线在箱内的位置给出偏态方向(贴上边说明右偏);箱高即 IQR,是离散度的稳健度量;须外的圈是超过 1.5 倍 IQR 的点,数目本身就是信息。

小提琴:密度与镜像

ax = sns.violinplot(data=tips, x='day', y='total_bill', inner='quartile') # inner 选项:box(默认,内嵌微型箱线)、quartile(四分位线)、point、stick、None # 输出说明:Saturday 的琴身在上肩部明显鼓出一个"副峰"—— # 这个双峰形态在箱线图里被压缩成一根稍偏的中位线,信息完全丢失

小提琴与箱线的分工:箱线是标准化摘要,跨组比较严格公平;小提琴保留形状,能发现双峰、截断这类箱线看不见的结构,但左右对称的部分是镜像幻影(同一份数据画了两遍),读图时别把宽度当双倍样本。cut=0 在这里同样重要——琴身不许越过数据的实际最小最大值。

# split=TRUE:两组各占半个琴身,双类别比较的紧凑形态 ax = sns.violinplot(data=tips, x='day', y='total_bill', hue='time', split=True, cut=0) # 输出说明:Thursday 左半(午餐)明显厚于右半(晚餐), # 其余三天几乎没有午餐——数据里 Thursday 只有 1 桌晚餐

柱状与点图:统计摘要的两张面孔

fig, axes = plt.subplots(1, 2, figsize=(11, 4)) sns.barplot(data=tips, x='day', y='tip_rate', estimator='mean', ax=axes[0]) axes[0].set_ylabel('小费比例(均值)') sns.pointplot(data=tips, x='day', y='tip_rate', hue='sex', dodge=True, ax=axes[1]) axes[1].set_ylabel('小费比例') plt.show() # 输出说明:左图四根柱高度接近,误差棒大量互相覆盖; # 右图按性别拆开后出现交叉——女性在小额账单日(周四)给得更多, # 男性在周末反超。这个交互效应在左图里被均值抹平了

bar 与 point 的本质区别:柱状图以高度编码数值,基线必须是零,且柱面积会放大微小差异的视觉冲击;pointplot 以点的位置编码数值,基线自由、连线天然表达"跨类别的变化",是交互效应的首选。误差棒两者通用,默认 95% 置信区间——注意它表达的是"均值估计的不确定性",与箱线的 IQR(数据本身的离散)是两回事。

男性在周末反超。这个交互效应在左图里被均值抹平了

参数变式与易错辨析

箱须的口径可以改:whis=1.5 只是教科书约定,敏感场景换 whis=(5, 95),须直接画到第 5 与第 95 百分位,离群点集合随之缩小——口径本身要写进图注,否则两个版本的图会引发无谓争论。showfliers=False 可藏掉须外点,汇报图常用,但探索阶段禁用,藏掉证据不等于证据消失。小提琴的宽度归一由 density_norm 控制,这是最容易踩的默参:默认 area 让每把琴总面积相等,形状可比但总量信息丢失;count 让琴宽正比于样本量,小组的琴会细成一条线,规模与形状一次读出;width 按最大宽度对齐。比较形状用 area、同时看规模用 count,混用会导致结论错位。

barplot 有个静默陷阱:y 列若是从外部表格读进来的字符串(带千分位逗号或货币符号),聚合要么报错要么整图空白,先 pd.to_numericerrors='coerce' 清洗再画。误差棒的样式走 err_kws={'linewidth': 1}(旧参数 errwidth 已废弃),多组比较时配 capsize=0.08 给误差棒加帽,误读率明显下降。类别名太长时用 orient='h' 横排,长标签平躺在 y 轴上不必旋转四十五度。还有一个易混点:x 与 hue 可以对调,成图不变但扫读分工变了——把有自然顺序的维度放 x 轴、纯分组维度放 hue,读者先看哪个维度由你决定;pointplot 的 dodge 同理,交叉结构要在 x 方向可比,放错维度会把交互藏进 dodge 的横向偏移里。

countplot:只数个数

ax = sns.countplot(data=tips, x='day', hue='time') ax.set_ylabel('观测条数') # 输出说明:Thursday 62 桌、Friday 19 桌、Saturday 87 桌、Sunday 76 桌; # Friday 样本最少——第 4.2 节开头那些 Friday 相关结论都应带着这个前提读

countplot 是 barplot 的特例(统计量=计数、不需要 y 列),任何分类分析的第一张图应该是它:先知道每组有多少人,再谈组间比较。

本节要点回顾

  • 箱体三读:中位线位置看偏态、箱高看离散、须外圈数离群;
  • 小提琴看形状、箱线看公平:双峰结构只有 violin 抓得住,镜像宽度别当双倍样本;
  • 误差棒不等于 IQR:前者是估计精度(置信区间),后者是数据离散,两套语言别混用;
  • 交互效应用 pointplot:连线加 dodge 表达交叉,柱状图会把交互抹平;
  • 先 count 再比较:样本量悬殊的组,任何均值结论都要降级。

下一节把整个家族装进 catplot 工厂,figure 级语法三部曲收官。


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