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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 14:36:04