如何在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
相关产品推荐
相关产品推荐

