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

ggplot2重复测量图:叠加平均轨迹与误差条的实现方法

重复测量轨迹图合并实现方案

问题描述

已绘制两张重复测量得分图表:第一张为所有受试者的个体得分轨迹图,第二张为组平均得分及误差条图,需要将平均轨迹和误差条叠加到个体轨迹图上。
个体轨迹图
均值误差条图

现有代码

# 重命名变量用于数据重塑
names(data_wide) [names(data_wide) == "score.baseline"] <- "score.0"
names(data_wide) [names(data_wide) == "score.wave1"] <- "score.1"
names(data_wide) [names(data_wide) == "score.wave2"] <- "score.2"
names(data_wide) [names(data_wide) == "score.wave3"] <- "score.3"

# 宽表转长表
data_long <- reshape(as.data.frame(data_wide), 
                             idvar="ID", 
                             varying=c("score.0", "score.1", "score.2", "score.3"),
                             direction="long")

# 计算分组统计量
data_long.group <- data_long %>% 
                    group_by(time) %>% 
                    summarise(
                    score_mean = (mean(score, na.rm=TRUE)),
                    score_sd = (sd(score, na.rm=TRUE))
                    ) 

# 绘制个体得分轨迹
ggplot(data_long, aes(x = factor(time), y = score, color = as.factor(ID), group = ID)) + 
  geom_line(size=0.2) + 
  theme_classic(base_size = 18) + 
  theme(legend.position = "none") + 
  labs(title = "Trajectories", y = "data score", x = "Wave") 

# 绘制组均值与标准差误差条
ggplot(data_long.group, aes(x = time, y = score_mean)) + 
  geom_line(size=0.2) + 
  theme_classic(base_size = 18) + 
  theme(legend.position = "none") + 
  labs(title = "Trajectories", y = "data score", x = "Wave") +
  geom_errorbar(aes(ymin=score_mean-score_sd, ymax=score_mean+score_sd), width=.2,
                 position=position_dodge(0.05))

示例数据

data_wide <- structure(
    list(ID = c(1, 2, 3, 4, 5, 6), 
    score.baseline = c(4, 4, 5, 4, 6, 4), 
    score.wave1 = c(3.5, 5.67, 5.33, 4, 6.67, 4.5), 
    score.wave2 = c(4, 5, NA, 4, 6.67, 4), 
    score.wave3 = c(6, 6, 4.67, 4.33, 6.67, 3)), 
    row.names = c(1L, 2L, 3L, 4L, 5L, 6L), 
    class = c("data.frame"))

实现方法

核心修改逻辑

  • 统一两个图层的x轴类型,避免坐标轴不匹配
  • 将个体轨迹特有的映射规则(按ID分组、按ID上色)放到对应图层内,不影响全局映射
  • 显式指定叠加图层的数据源,单独设置均值线、误差条的样式便于和个体轨迹区分

修改后可运行代码

# 先将汇总数据的time转成因子,和个体数据的x轴类型对齐
data_long.group$time <- factor(data_long.group$time)

ggplot(data_long, aes(x = factor(time), y = score)) + 
  # 绘制个体轨迹
  geom_line(aes(color = as.factor(ID), group = ID), size=0.2) + 
  # 叠加组均值线,黑色加粗突出显示
  geom_line(data = data_long.group, aes(y = score_mean, group = 1), color = "black", size = 1) +
  # 叠加标准差误差条
  geom_errorbar(data = data_long.group, aes(y = score_mean, ymin=score_mean-score_sd, ymax=score_mean+score_sd), 
                width=.2, color = "black",
                position=position_dodge(0.05)) +
  theme_classic(base_size = 18) + 
  theme(legend.position = "none") + 
  labs(title = "Trajectories", y = "data score", x = "Wave")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:54:00