CodeWalk

Seaborn高级统计图:分类数据可视化与多变量关系

作者:孤独的心 · 2026-05-30 12:55

请介绍Seaborn库中用于分类数据可视化的核心函数及其适用场景。说明catplot()的kind参数支持哪些图形类型(box/boxen/violin/bar/point/strip/swarm),以及relplot()如何通过hue/style/size/col/row展示多变量关系。给出一个包含分面网格的完整绘图示例。

回答

孤独的心

分类数据可视化

import seaborn as sns
tips = sns.load_dataset('tips')

# catplot统一接口
sns.catplot(data=tips, x='day', y='total_bill', kind='box')       # 箱线图
sns.catplot(data=tips, x='day', y='total_bill', kind='violin')    # 小提琴图
sns.catplot(data=tips, x='day', y='total_bill', kind='bar')       # 条形图
sns.catplot(data=tips, x='day', y='total_bill', kind='boxen')     # 增强箱线图(大数据)
sns.catplot(data=tips, x='day', y='total_bill', kind='strip')     # 散点分布
sns.catplot(data=tips, x='day', y='total_bill', kind='swarm')     # 非重叠散点

relplot展示多变量

# hue(颜色)、style(样式)、size(大小)、col/row(分面)
sns.relplot(data=tips, x='total_bill', y='tip',
            hue='time', style='sex', size='size',
            col='day', row='smoker',  # 2×n分面网格
            aspect=0.8, height=3)

完整分面示例

# 用displot展示分布(Python 3.10+)
sns.displot(data=tips, x='total_bill', hue='sex',
            col='day', kind='hist', bins=20,
            facet_kws={'sharey': False})  # 独立y轴

Seaborn vs Matplotlib:Seaborn简化统计图,自动计算置信区间/核密度/分面,但底层仍是matplotlib;复杂定制仍需回退到OO-API。