如何在RStudio中用geom_point散点图添加各组均值点并判断组间差异
解决方案
1. 数据重塑(推荐优化步骤)
你的原始数据是宽格式,不利于统一处理分组逻辑,先转成 tidy 长格式,后续绘图和统计都会更高效:
library(tidyr) library(dplyr) # 假设df包含Period_1_AB, Period_2_AB, Period_1_BA, Period_2_BA列 df_tidy <- df %>% pivot_longer( cols = everything(), names_to = c("Period", "Group"), names_sep = "_", values_to = "Value" ) %>% pivot_wider( names_from = Period, values_from = Value ) %>% na.omit() # 清理缺失值
2. 绘制带均值点的散点图
用重塑后的数据统一绘制两组散点,并添加每组的均值点(用醒目样式区分):
library(ggplot2) ggplot(df_tidy, aes(x = Period_1, y = Period_2, shape = Group)) + geom_point(size = 2) + # 用shape区分AB/BA组,和你原设置一致 geom_abline(slope = 1, intercept = 0, linetype = "dashed") + # 参考线 # 添加每组均值点 stat_summary( fun = mean, geom = "point", size = 4, color = "red", shape = 16 ) + scale_shape_manual(values = c("AB" = 0, "BA" = 2)) + # 匹配你原有的点形状 theme_bw() # 替换默认主题,比theme_update()更实用
如果不想修改数据格式,也可以直接在原有代码上硬编码添加均值点(代码冗余,不推荐):
ggplot(df , aes(x = Period_1_AB , y = Period_2_AB )) + geom_point(pch = 0) + geom_point(aes(x = Period_1_BA , y = Period_2_BA), pch = 2) + geom_abline() + # AB组均值点 geom_point( x = mean(df$Period_1_AB, na.rm = TRUE), y = mean(df$Period_2_AB, na.rm = TRUE), pch = 16, size = 4, color = "red" ) + # BA组均值点 geom_point( x = mean(df$Period_1_BA, na.rm = TRUE), y = mean(df$Period_2_BA, na.rm = TRUE), pch = 16, size = 4, color = "blue" ) + theme_bw()
3. 组间差异检验
判断两组差异的核心是比较每组的时间变化量(Period2 - Period1),根据实验设计选择对应检验方法:
# 计算两组变化值 df_diff <- df %>% mutate( AB_diff = Period_2_AB - Period_1_AB, BA_diff = Period_2_BA - Period_1_BA ) %>% select(AB_diff, BA_diff) %>% pivot_longer(everything(), names_to = "Group", values_to = "Diff") %>% na.omit() # 先做正态性检验,判断用参数/非参数检验 shapiro.test(df_diff$Diff) # 若数据正态(p>0.05),独立样本用t检验: t.test(Diff ~ Group, data = df_diff) # 若为同一受试者的交叉设计,用配对t检验: t.test(df$AB_diff, df$BA_diff, paired = TRUE) # 若数据非正态,用Wilcoxon秩和检验: wilcox.test(Diff ~ Group, data = df_diff)
内容的提问来源于stack exchange,提问作者Jacob deril raj
相关产品推荐
相关产品推荐

