You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ggboxplot时如何为每组打印样本总数(n=xxx)?

刚好做过类似的需求,给你两种常用的实现方式,都是基于ggpubr(ggboxplot属于这个包)和dplyr来完成的,直接上代码和实用说明:

方式一:将样本数显示在X轴标签上

这个方法适合希望X轴直接携带样本信息的场景,思路是先统计每个分组的样本量,再把原分组标签和样本数拼接成新的轴标签。

library(ggpubr)
library(dplyr)

# 第一步:统计每个分组的样本数,并生成带样本量的新标签
group_labels <- mtcars %>%
  group_by(cyl) %>% # 这里的cyl是你的分组变量,替换成自己的数据列名
  summarise(sample_n = n()) %>%
  mutate(new_label = paste0(cyl, "\n(n=", sample_n, ")")) # 换行让标签更清晰

# 第二步:绘制箱线图,替换X轴标签
ggboxplot(mtcars, x = "cyl", y = "mpg") +
  scale_x_discrete(labels = group_labels$new_label)
方式二:将样本数显示在箱线图内部/上方

如果想让样本数直接和箱线绑定(比如箱线顶部、中位数位置),可以用geom_text来添加文本,核心是先计算每个分组的文本放置位置。

示例1:放在箱线顶部(避免遮挡箱线)

# 统计分组样本数和文本的Y轴位置(这里取每组Y值最大值+1,可根据数据调整)
group_stats <- mtcars %>%
  group_by(cyl) %>%
  summarise(
    sample_n = n(),
    y_position = max(mpg) + 1 # 调整数值改变文本上下位置
  )

# 绘制箱线图并添加样本数文本
ggboxplot(mtcars, x = "cyl", y = "mpg") +
  geom_text(
    data = group_stats,
    aes(x = cyl, y = y_position, label = paste0("n=", sample_n)),
    color = "darkred", size = 4 # 自定义颜色和大小
  )

示例2:放在箱线内部(中位数位置)

如果想让文本嵌入箱线里,把Y轴位置改成中位数即可:

group_stats <- mtcars %>%
  group_by(cyl) %>%
  summarise(
    sample_n = n(),
    y_position = median(mpg) # 用中位数作为文本位置
  )

ggboxplot(mtcars, x = "cyl", y = "mpg") +
  geom_text(
    data = group_stats,
    aes(x = cyl, y = y_position, label = paste0("n=", sample_n)),
    color = "white", size = 4 # 白色文字在箱线内更显眼
  )

两种方法都很灵活,你可以根据自己的可视化需求调整文本位置、颜色、字体大小,甚至标签格式(比如改成N=xxx)。

内容的提问来源于stack exchange,提问作者Jonathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:15:07