RStudio中使用ggplot2绘制含双因子响应变量的时间进程图
ggplot2 绘制双因子分组时间进程折线图
问题原因
之前绘图出现乱线,核心是两点:
- 没有显式指定双因子交互作为分组依据,ggplot无法正确识别需要连接的观测序列
- 未对同时间点同分组的重复观测做均值聚合,直接连接原始重复值就会出现点位错乱的折线。
实现方案
两种方式都可以实现需求,按需选择即可:
方案1:ggplot内置统计聚合,无需提前处理数据
直接调用stat_summary自动按分组计算统计量,不用提前改写原始数据:
# 加载ggplot2包 library(ggplot2) ggplot(df, aes( x = Week, y = Response, # 双因子交互作为分组依据,同时映射颜色、线型区分不同组合 color = Factor1, linetype = Factor2, group = interaction(Factor1, Factor2) )) + # 按分组计算均值并绘制折线 stat_summary(fun = mean, geom = "line", linewidth = 1) + # 可选:添加均值标记点 stat_summary(fun = mean, geom = "point", size = 2) + # 可选:添加均值标准误误差线 stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.1) + # 调整标签与主题 labs(x = "观测周数", y = "响应变量值", color = "Factor1", linetype = "Factor2") + theme_bw()
方案2:提前汇总统计量后绘图
适合需要自定义统计指标、后续复用汇总表的场景,用dplyr先聚合再绘图:
library(ggplot2) library(dplyr) # 按周、两个因子分组,计算均值、标准误 df_agg <- df %>% group_by(Week, Factor1, Factor2) %>% summarise( resp_mean = mean(Response, na.rm = TRUE), resp_se = sd(Response, na.rm = TRUE) / sqrt(n()), .groups = "drop" ) # 基于汇总表绘图 ggplot(df_agg, aes( x = Week, y = resp_mean, color = Factor1, linetype = Factor2, group = interaction(Factor1, Factor2) )) + geom_line(linewidth = 1) + geom_point(size = 2) + geom_errorbar(aes(ymin = resp_mean - resp_se, ymax = resp_mean + resp_se), width = 0.1) + labs(x = "观测周数", y = "响应变量均值", color = "Factor1", linetype = "Factor2") + theme_bw()
注意事项
- 必须显式设置
group = interaction(Factor1, Factor2),否则ggplot无法正确识别分组,会出现跨组连线的问题 - 如果
Week变量存储为因子类型,需要提前按时间顺序设置因子水平,避免折线连接顺序错乱 - 如果不需要展示误差线,直接删除对应
geom_errorbar/stat_summary误差线的代码即可
内容的提问来源于stack exchange,提问作者ConfusedB
相关产品推荐
相关产品推荐

