如何用ggstats::stat_prop()在分面箱线图中计算跨分面的分组比例?
解决方案:使用
ggstats::stat_prop()的panel参数实现跨分面比例计算 要让同一x轴分组的比例在所有分面中总和为1,只需调整stat_prop()的参数并正确指定美学映射即可,无需预计算整个数据集的比例:
核心调整逻辑:
- 设置
panel = FALSE:让比例计算跨所有分面进行,而非局限于单个分面的子集数据 - 在
aes()中指定by = group:以group为分组维度,计算每个分面内该group的数量占该group全局总样本数的比例
- 设置
完整可运行代码:
library(ggplot2) library(ggstats) set.seed(123456) n = 50 df <- data.frame(group = sample(c('A', 'B', 'C'), size = n, replace = TRUE), value = rnorm(n), strata = sample(c('X', 'Y'), n, replace = TRUE)) ggplot(df, aes(x = group, y = value)) + geom_boxplot(aes(color = group)) + geom_text( aes( label = sprintf("%s (n=%d)", scales::label_percent()(after_stat(prop)), after_stat(count)), by = group # 指定比例计算的分组维度 ), stat = ggstats::StatProp, y = 0, panel = FALSE # 跨分面计算比例分母 ) + facet_wrap(facets = vars(strata))
- 效果验证:
- 以
group A为例:全数据集共18个样本,分面X中有10个(比例≈55.56%)、分面Y中有8个(比例≈44.44%),两者总和为100% - 标签同时显示当前分面内的分组比例和样本数,完全匹配需求
- 以
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

