如何在ggplot中添加stat_summary计算不按Athlete分组的均值线
解决ggplot2中stat_summary按整体Moment计算均值的问题
问题核心是你在全局aes()中设置了group = Athlete,导致stat_summary()继承了这个分组逻辑,最终按每个运动员计算均值而非整体按Moment聚合。
解决方案
在stat_summary()中显式覆盖group参数,设置为group = 1,强制让该图层忽略原有的运动员分组,基于整个数据集按Moment计算均值:
ggplot(GroupedZScoreFatigue, aes(x = factor(Moment, levels = c("MD-4", "MD-3", "MD-2", "MD-1", "MD", "MD+1", "MD+2")), y = Mean, group = Athlete)) + geom_line(size= 0.2) + geom_point(size = 2) + # 添加整体均值折线,覆盖group参数 stat_summary(fun = mean, colour="blue", geom="line", size= 0.2, group = 1) + ylab("Fatigue (x̄±σ)") + xlab("Moment") + ggtitle("Individual Z-Score Variations - Fatigue") + theme_classic(base_size = 12) + theme(legend.position = "None", plot.title = element_text(hjust = 0.5)) + ylim(-2,4)
原理说明
ggplot2的图层会默认继承全局aes()中的所有参数,包括group。当你在全局设置group = Athlete后,stat_summary()会自动按运动员分组计算均值。通过在stat_summary()中单独设置group = 1,可以让该图层使用一个统一的分组(即整个数据集),从而计算每个Moment对应的整体均值。
内容的提问来源于stack exchange,提问作者Sérgio M. Querido
相关产品推荐
相关产品推荐

