You need to enable JavaScript to run this app. Seaborn箱线图绘图:是否存在类似relplot、displot的分面实现?
优惠活动
大模型
产品
解决方案
定价
更多

Seaborn箱线图绘图:是否存在类似relplot、displot的分面实现?

分类图专用分面接口

Seaborn内置的catplot()就是和relplot()、displot()定位完全一致的分面绘图接口,三者属于同一层级的图形级接口,覆盖的绘图类型各有区分:

  • relplot:面向关系类可视化,支持散点图、折线图
  • displot:面向数据分布类可视化,支持直方图、核密度估计图、经验累积分布函数图
  • catplot:面向分类统计类可视化,支持箱线图、小提琴图、条形图、点图、分类散点图等全部分类绘图类型,原生支持分面网格排布、col_wrap自动换行参数,所有参数逻辑和前两个接口完全统一
代码实现优化

你原本通过循环过滤数据、手动创建子图的逻辑,都可以通过catplot的内置参数完成,不需要编写冗余的循环逻辑:

基础场景实现(对应Lunch/Dinner两个分面)

import seaborn as sns
sns.set(style="ticks")
tips = sns.load_dataset("tips")

# 直接按time变量的取值拆分网格,绘制箱线图
g = sns.catplot(
    data=tips,
    x="sex",
    y="total_bill",
    hue="day",
    col="time",
    kind="box",
    height=5,
    aspect=1.2,
)

多取值分面的适配

当分面变量的取值超过2个时,这种实现方式的优势会更突出:

  • 不需要手动遍历变量取值、逐次过滤数据、计算子图位置和网格行列数
  • 直接传入col_wrap参数即可实现和relplot、displot一致的自动排版,比如分面变量有6个取值时,设置col_wrap=2就会自动排成3行2列的规整网格
  • 自动对齐所有子图的坐标轴范围、合并重复图例、优化子图间距,避免手动循环经常出现的刻度不统一、每个子图重复显示图例的问题

比如需要按day的4个取值分面,自动排成2列网格的代码:

g = sns.catplot(
    data=tips,
    x="sex",
    y="total_bill",
    hue="time",
    col="day",
    col_wrap=2,
    kind="box",
    height=6,
)
灵活度说明

catplot返回标准的FacetGrid对象,后续可以完全按照业务需求对单个子图做自定义调整,比如修改子图标题、调整坐标轴刻度、更换配色方案,灵活度和手动编写循环的方式没有差异,同时代码更简洁规范,适配不同分面取值数量的场景时不需要修改核心逻辑。


内容的提问来源于stack exchange,提问作者rpb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 08:24:05