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

在R语言ggmosaic包中,如何为列添加权重百分比标签?

给ggmosaic马赛克图添加组内百分比标签

要实现每一列(Class分组)的百分比总和为100%,可以通过两种方式实现:

方法一:直接在geom_mosaic_text中计算组内百分比

利用ggmosaic内置的统计变量,直接在标签中计算当前Class分组内的占比:

library(tidyverse)
library(ggmosaic)

ggplot(data = titanic) +
  geom_mosaic(aes(x = product(Class), fill = Survived)) +
  geom_mosaic_text(
    size = 5,
    aes(
      x = product(Class), 
      fill = Survived,
      # 用当前分组计数除以Class总计数,转成百分比格式
      label = scales::percent(..count.. / ..x_count..)
    ),
    stat = "mosaic"  # 指定使用马赛克图的统计逻辑
  )
  • ..count..:对应每个Survived类别的观测数量
  • ..x_count..:对应当前Class分组的总观测数量
  • scales::percent():将小数转换为百分比格式(比如0.3转成30%)

方法二:提前计算百分比再绘图

先在数据集中统计好每个Class内Survived的占比,再映射到标签上,逻辑更直观:

library(tidyverse)
library(ggmosaic)

# 预处理数据:计算每个Class内Survived的百分比
titanic_perc <- titanic %>%
  group_by(Class, Survived) %>%
  summarise(n = n(), .groups = "drop") %>%  # 统计每组数量
  group_by(Class) %>%
  mutate(perc = n / sum(n)) %>%  # 计算组内百分比
  ungroup()

# 绘制马赛克图
ggplot(data = titanic_perc) +
  geom_mosaic(aes(x = product(Class), weight = n, fill = Survived)) +
  geom_mosaic_text(
    size = 5,
    aes(
      x = product(Class), 
      weight = n,
      fill = Survived,
      label = scales::percent(perc)
    )
  )

这种方法适合需要对百分比做额外调整(比如保留小数位数)的场景,只需要修改perc的计算逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:25:12