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

如何在plotnine中通过特征交互实现分组?

Plotnine中实现ggplot的interaction分组功能

问题背景

在R的ggplot2中,可以通过group=interaction(store, promo)直接在绘图的美学映射里,基于两个离散因子的唯一组合创建分组,实现折线图的分组连线。但在plotnine中直接使用该语法会报错,目前只能通过手动在数据框中创建分组列实现,这种方式需要修改原数据,不够高效。

解决方案

无需修改原数据框,直接在plotnine的美学映射内完成多因子分组,有两种简洁方式:

方案1:使用元组作为分组依据

plotnine支持将多个变量组合成元组作为分组标识,直接在group参数中指定即可:

import plotnine as p9
import pandas as pd

df = pd.DataFrame({
    'week': [1,2,3,4]*4,
    'store': (["A"]*8 + ["B"]*8),
    'promo': (["promo1"]*4 + ["promo2"]*4)*2,
    'sales': [1, 2, 6, 7, 2, 3, 5, 6, 3, 4, 7, 8, 3, 5, 8, 9]
})

(
    p9.ggplot(df, p9.aes(
        x="week", 
        y="sales", 
        color="store", 
        shape="promo",
        group="(store, promo)"
    )) + 
    p9.geom_point(size=3) +
    p9.geom_line()
)

方案2:字符串拼接生成分组因子

通过将两个离散变量拼接成唯一字符串并转为因子,也能实现相同的分组效果:

(
    p9.ggplot(df, p9.aes(
        x="week", 
        y="sales", 
        color="store", 
        shape="promo",
        group="factor(store + '_' + promo)"
    )) + 
    p9.geom_point(size=3) +
    p9.geom_line()
)

说明

  • 两种方法都不需要修改原数据框,直接在绘图逻辑内完成分组,和R中interaction的功能完全一致。
  • 元组方式更简洁,字符串拼接方式生成的分组标识可读性更强,适合需要调试分组逻辑的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:57:17