Seaborn高级统计图:分类数据可视化与多变量关系
请介绍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。