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

如何在ggplot2箱线图的X轴添加观测数量

把箱线图的观测数量标注在X轴位置

你现在的代码是把观测数放在箱线图的中位数上方,要把它移到X轴附近,只需要调整give.n函数里的y坐标计算逻辑,让文本位置落在X轴区域即可。这里有两种实用的调整方式:

方法1:基于数据最小值动态设置位置

这种方式会根据每个组的最小值计算文本位置,确保它在箱线图下方、靠近X轴的地方,适配不同数据集的数值范围:

# 定义计算观测数和位置的函数
give.n <- function(x){
  # 把文本放在最小值的90%位置(贴近X轴)
  return(c(y = min(x)*0.9, label = length(x)))
}

# 绘制箱线图
ggplot(mtcars, aes(factor(cyl), mpg)) +
  geom_boxplot(fill = "grey80", colour = "#3366FF") +
  # 添加观测数文本,位置落在X轴附近
  stat_summary(fun.data = give.n, geom = "text")

方法2:固定Y轴位置统一对齐

如果希望所有观测数都对齐在同一高度(比如X轴上方固定位置),可以直接设置一个固定的y值,针对mtcars的mpg数据,设置y=8就很合适:

give.n <- function(x){
  return(c(y = 8, label = length(x)))
}

ggplot(mtcars, aes(factor(cyl), mpg)) +
  geom_boxplot(fill = "grey80", colour = "#3366FF") +
  stat_summary(fun.data = give.n, geom = "text")

额外优化:和X轴标签精准对齐

如果想让观测数刚好在X轴标签的正上方,可以用position_nudge微调位置,避免和轴标签重叠:

ggplot(mtcars, aes(factor(cyl), mpg)) +
  geom_boxplot(fill = "grey80", colour = "#3366FF") +
  stat_summary(fun.data = give.n, geom = "text", 
               position = position_nudge(y = -1)) # 向下微调1个单位,适配X轴标签位置

调整后,每个气缸组的观测数量就会清晰显示在X轴对应位置,既直观又不会遮挡箱线图内容啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:14:29