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

ggplot:如何连接分类时间序列中同类别相邻点

解决方案

要实现同一行为编码内相邻点的连续连接,核心是给同一CoupleID下连续相同的Code_m值分配专属分组,让geom_line只连接同组内的点。具体步骤如下:

1. 生成连续相同编码的分组变量

先对数据处理,标记出每个连续相同Code_m的区块。有两种方法可选:

方法一:用data.table的rleid函数(简洁高效)

library(dplyr)
library(data.table)

data_onedyad <- data_onedyad %>%
  group_by(CoupleID) %>%
  # rleid会给连续相同的Code_m分配同一个ID
  mutate(continuous_group = rleid(Code_m)) %>%
  ungroup()

方法二:用dplyr原生函数(无需额外装包)

library(dplyr)

data_onedyad <- data_onedyad %>%
  group_by(CoupleID) %>%
  mutate(
    # 对比当前行与前一行的Code_m,不同则触发累加,生成分组ID
    continuous_group = cumsum(c(1, diff(Code_m) != 0))
  ) %>%
  ungroup()

2. 修改ggplot代码实现分组连线

在原代码基础上,给geom_line指定分组为interaction(CoupleID, continuous_group),确保只连接同一CoupleID下、连续相同Code_m的点:

ggplot(data = data_onedyad, aes(x = Sequence, y = Code_m)) +
  geom_point(colour = "blue", shape = 15) +
  # 仅连接同一连续编码组内的相邻点
  geom_line(aes(group = interaction(CoupleID, continuous_group)), colour = "blue") +
  theme_minimal() +
  theme(panel.grid.minor = element_blank())

为什么geom_step不行?

geom_step的逻辑是按x轴顺序连接所有点,不管y值是否变化,所以会跨不同行为编码连线,不符合需求。而通过生成连续相同编码的分组,能精准控制连线的范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 10:54:52