在R语言中使用ggplot为箱线图添加汇总统计标签的问题求助
问题根因
stat_summary 中 fun.data 接收的 y 参数是当前分组下var2列的数值向量,而非当前分组对应行的索引。你直接用df$var3[y]相当于把var2的值当作行号取var3的值,计算逻辑完全错位,自然得到和预期不符的结果。
修复方案
建议提前计算好每个分组的统计值,再通过geom_text叠加,逻辑清晰不易出错:
library(tidyverse) var1<- c("A", "B", "A", "B", "B", "B", "A", "B", "B") var2<- as.numeric(c(4:12)) var3<- as.numeric(c(1:9)) df<- data.frame(var1, var2, var3) # 提前计算分组统计量 df_stat <- df %>% group_by(var1) %>% summarise( count = n(), sum_var3 = sum(var3), # 标签位置放在箱线图上方,基于该组var2最大值加偏移 y_pos = max(var2) * 1.05 ) ggplot(df, aes(var1, var2)) + geom_boxplot() + # 用预计算的统计数据叠加文本标签 geom_text(data = df_stat, aes(x = var1, y = y_pos, label = paste0('number of var1 = ', count, '\n', 'total number of var3 = ', sum_var3)), vjust = 0.9)
内容的提问来源于stack exchange,提问作者pcompston
相关产品推荐
相关产品推荐

