You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Seaborn的factorplot叠加图表?含箱线图加蜂群图方案

在Seaborn中叠加Factorplot及箱线图+蜂群图的实现方案

嘿,我来帮你搞定这两个Seaborn可视化的需求!咱一步步来拆解:

一、在箱线图(Factorplot/ Catplot)上叠加蜂群图

你已经知道单轴下的实现方式,那扩展到Factorplot(现在官方更推荐用catplot,它是factorplot的升级版本,用法基本一致)的多子图场景其实很简单——核心是利用Factorplot返回的FacetGrid对象,它包含了所有子图的坐标轴,我们只需要遍历这些坐标轴,逐个叠加蜂群图即可。

完整代码示例:

import seaborn as sns
import numpy as np

# 加载示例数据集
tips = sns.load_dataset("tips")

# 第一步:创建箱线图的Factorplot,获取FacetGrid对象g
# 这里用kind="box"指定绘制箱线图,whis=np.inf让箱线图显示所有数据范围
g = sns.catplot(x="day", y="tip", data=tips, kind="box", whis=np.inf)

# 第二步:遍历FacetGrid中的每个子图坐标轴,叠加蜂群图
for ax in g.axes.flat:
    # 在当前坐标轴上绘制蜂群图,color=".2"用深灰色区分箱线图
    sns.swarmplot(x="day", y="tip", data=tips, color=".2", ax=ax)

关键点说明:

  • 如果你的Factorplot带有hue、col或row参数(比如按性别拆分、按是否吸烟分栏),遍历axes的方式依然有效,会自动在所有子图上完成叠加;
  • 若带hue参数,记得给swarmplot也加上相同的hue和dodge=True,这样蜂群图会和箱线图的分组对齐,避免重叠。

二、叠加两个Factorplot

如果要叠加两个不同类型的Factorplot(比如箱线图+点图,或者两个不同数据集的同类型图),思路和上面一致:先创建第一个Factorplot拿到FacetGrid,再在每个子图轴上绘制第二个图。

示例:叠加箱线图和点图

import seaborn as sns

tips = sns.load_dataset("tips")

# 创建第一个Factorplot:箱线图
g = sns.catplot(x="day", y="tip", hue="sex", data=tips, kind="box", col="smoker")

# 叠加第二个Factorplot类型:点图
for ax in g.axes.flat:
    # 绘制点图,用红色区分,dodge=True对齐hue分组
    sns.pointplot(x="day", y="tip", hue="sex", data=tips, color="red", dodge=True, ax=ax)
    # 移除第二个图的图例,避免重复显示
    ax.legend_.remove()

小技巧:

  • 用g.map()方法也能快速实现叠加,比如g.map(sns.pointplot, "day", "tip", color="red"),但遍历axes的方式更灵活,能自定义更多参数;
  • 如果是不同数据集的叠加,只要确保两个数据集的x/y变量匹配,直接在swarmplot/pointplot中指定对应data即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:39:04