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
相关产品推荐
相关产品推荐

