如何在R中为不等样本量分组绘制带数值标注的百分比堆叠图
R实现分组百分比堆叠柱状图绘制(带百分比标签)
如果尚未安装所需依赖包,先运行安装代码:
install.packages(c("ggplot2", "dplyr"))
实现步骤
1. 加载依赖包
library(ggplot2) library(dplyr)
2. 构造符合需求的示例数据
我们固定A组样本量19、B组样本量15,总数据量34条,生成二分类变量Drug1:
set.seed(123) # 设置随机种子保证结果可复现 dat1 <- data.frame( id = 1:34, Group = c(rep("A",19), rep("B",15)), Drug1 = sample(c("Yes", "No"), 34, replace = TRUE) )
3. 预计算分组占比
提前统计每个分组内服药、未服药人群的占比,用于后续标签展示:
plot_data <- dat1 %>% group_by(Group, Drug1) %>% summarise(count = n()) %>% mutate(percent = count/sum(count)*100) %>% ungroup()
4. 绘制带标签的百分比堆叠图
ggplot(plot_data, aes(x = Group, y = percent, fill = Drug1)) + # 百分比堆叠柱状图 geom_bar(stat = "identity", position = "fill") + # Y轴显示为百分比格式 scale_y_continuous(labels = scales::percent_format()) + # 在堆叠块居中位置添加百分比标签 geom_text(aes(label = paste0(round(percent,1), "%")), position = position_fill(vjust = 0.5), size = 5) + # 自定义轴标签和图例名称 labs(x = "分组", y = "人群占比", fill = "是否服用Drug1") + theme_bw()
代码说明
position = "fill"参数会自动将每个条形高度标准化为1,实现百分比堆叠效果position_fill(vjust = 0.5)可让标签自动对齐到每个堆叠块的垂直居中位置- 可按需调整
size参数修改标签字体大小,调整round(percent,1)中的数值控制百分比保留的小数位数
内容的提问来源于stack exchange,提问作者Jani
相关产品推荐
相关产品推荐

