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

如何用ggstats::stat_prop()在分面箱线图中计算跨分面的分组比例?

解决方案:使用ggstats::stat_prop()的panel参数实现跨分面比例计算

要让同一x轴分组的比例在所有分面中总和为1,只需调整stat_prop()的参数并正确指定美学映射即可,无需预计算整个数据集的比例:

  1. 核心调整逻辑:

    • 设置panel = FALSE:让比例计算跨所有分面进行,而非局限于单个分面的子集数据
    • 在aes()中指定by = group:以group为分组维度,计算每个分面内该group的数量占该group全局总样本数的比例
  2. 完整可运行代码:

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))
  1. 效果验证:
    • 以group A为例:全数据集共18个样本,分面X中有10个(比例≈55.56%)、分面Y中有8个(比例≈44.44%),两者总和为100%
    • 标签同时显示当前分面内的分组比例和样本数,完全匹配需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:24:50