如何在R中绘制带全部数据点且连接同受试者的堆叠箱线图
解决ggplot堆叠箱线图添加受试者独特颜色散点及连线问题
需求说明
需要绘制堆叠箱线图:
- X轴:Arm(分组A、B)
- Y轴:median_score
- 箱线填充色:对应time(C1D1、surgery、30days_postop)
- 额外要求:每个subject用独特颜色的散点标记,且同一Arm内的同subject数据点用线条连接
原代码仅显示散点,未实现散点独特颜色及连线效果。
修正后的代码
# 数据框(保持原数据不变) median_score_df <- data.frame( subject = c("01", "02", "03", "01", "02", "03", "01", "02", "03", "04", "05", "06", "04", "05", "06", "04", "05", "06"), median_score = c(-0.0310019210668711, 0.0444211182227502, 0.200311923393836, 0.221255710308368, 0.171509500650259, 0.196983984433688, 0.236694770226112, 0.206757913002601, 0.211477853334867, 0.284073710074792, 0.202858539728018, 0.147802463678213, 0.238249561603253, 0.423188711313101, 0.123448, -0.0310019210668711, 0.0444211182227502, 0.200311923393836), Arm = c('A','A','A','A','A','A','A','A','A','B','B','B','B','B','B','B','B','B'), time = c('C1D1','C1D1','C1D1','surgery','surgery','surgery','30days_postop','30days_postop','30days_postop','C1D1','C1D1','C1D1','surgery','surgery','surgery','30days_postop','30days_postop','30days_postop') ) # 修正后的绘图代码 library(ggplot2) ggplot(median_score_df, aes(x = Arm, y = median_score, fill = time)) + # 堆叠箱线图,隐藏默认异常点(用散点代替) geom_boxplot(outlier.shape = NA, position = position_dodge(width = .75)) + # 添加受试者独特颜色的散点,与箱线对齐 geom_point(aes(color = subject), position = position_dodge(width = .75), size = 3) + # 按受试者分组连线,与散点/箱线对齐,设置半透明避免遮挡 geom_line(aes(group = subject, color = subject), position = position_dodge(width = .75), alpha = 0.6) + # 设置坐标轴及图例标签 labs(x = "Arm", y = "score_to_test", fill = "时间点", color = "受试者") + # 可选:调整主题提升美观度 theme_minimal()
关键修改说明
- 散点独特颜色:在
geom_point的aes中添加color = subject,让每个受试者的散点显示独特颜色。 - 元素对齐:所有图层(箱线、散点、线条)统一使用
position_dodge(width = .75),保证同一时间分组的元素对齐。 - 受试者连线:通过
geom_line的aes中group = subject指定按受试者分组连线,同时继承color = subject让线条和散点颜色一致,用alpha降低线条透明度避免遮挡散点。 - 图例优化:修改
labs中的图例标题,明确区分时间点(填充色)和受试者(散点/线条颜色)的图例。
内容的提问来源于stack exchange,提问作者user23620911
相关产品推荐
相关产品推荐

