如何在ggplot2图形中显示分析所用的样本个体数量?
在ggplot2图形中添加样本量标注的方法
下面分几种常见场景给出可直接复用的实现方案:
1. 固定样本量标注(已知N值)
如果已经明确样本数(比如你提到的24),用annotate()函数在图的指定位置添加文本即可:
library(ggplot2) # 模拟蟹类数据 crab_data <- data.frame( carapace_length = rnorm(24, mean = 5, sd = 0.8), habitat = "rocky_shore" ) # 绘制箱线图并添加N标注 ggplot(crab_data, aes(x = habitat, y = carapace_length)) + geom_boxplot(fill = "#4682B4") + # 调整x、y参数控制标注位置,y用最大值加偏移避免遮挡图形 annotate("text", x = 1, y = max(crab_data$carapace_length) + 0.3, label = "N = 24", size = 4, fontface = "bold") + labs(title = "蟹类甲长分布", y = "甲长(cm)", x = "栖息地")
2. 动态计算单组样本量
不用手动输入N值,直接从数据中提取样本量,适合数据更新后自动同步标注:
# 动态生成标注文本 n_label <- paste("N =", nrow(crab_data)) ggplot(crab_data, aes(x = habitat, y = carapace_length)) + geom_boxplot(fill = "#4682B4") + annotate("text", x = 1, y = max(crab_data$carapace_length) + 0.3, label = n_label, size = 4, fontface = "bold") + labs(title = "蟹类甲长分布", y = "甲长(cm)", x = "栖息地")
3. 分组数据添加各组样本量
如果研究涉及多个分组(比如不同栖息地),可以先计算每组样本量,再用geom_text()批量添加:
# 模拟多分组蟹类数据 crab_multi_data <- data.frame( carapace_length = c(rnorm(24, 5, 0.8), rnorm(18, 4.5, 0.7), rnorm(32, 5.2, 0.9)), habitat = rep(c("rocky_shore", "sandy_beach", "mud_flat"), c(24, 18, 32)) ) # 计算每组样本量并生成标注文本 group_n <- aggregate(. ~ habitat, data = crab_multi_data, FUN = function(x) paste("N =", length(x))) colnames(group_n)[2] <- "n_label" # 绘图并添加分组标注 ggplot(crab_multi_data, aes(x = habitat, y = carapace_length)) + geom_boxplot(fill = "#4682B4") + geom_text(data = group_n, aes(x = habitat, y = max(crab_multi_data$carapace_length) + 0.4, label = n_label), size = 4, fontface = "bold") + labs(title = "不同栖息地蟹类甲长分布", y = "甲长(cm)", x = "栖息地")
也可以用stat_summary()直接调用ggplot2内置的..n..变量(代表每组样本数),写法更简洁:
ggplot(crab_multi_data, aes(x = habitat, y = carapace_length)) + geom_boxplot(fill = "#4682B4") + stat_summary(fun = max, geom = "text", aes(label = paste("N =", ..n..)), vjust = -0.5, size = 4, fontface = "bold") + labs(title = "不同栖息地蟹类甲长分布", y = "甲长(cm)", x = "栖息地")
内容的提问来源于stack exchange,提问作者Lucas Ventura
相关产品推荐
相关产品推荐

