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

