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

如何在ggplot2堆叠条形图中添加分组症状阳性率百分比标签

解决方案:ggplot2堆叠条形图添加分组分症状百分比标签

步骤1:数据预处理(计算阳性率与标签位置)

首先将数据整理为长格式(若你的数据已是长格式可跳过宽转长步骤),再按组别和症状分组计算阳性百分比,同时计算每个堆叠块的居中位置(用于放置标签)。

假设你的原始数据是宽格式(每一行对应1位患者,列包含组别和各症状的0/1值),示例代码如下:

library(dplyr)
library(tidyr)
library(ggplot2)

# 示例数据(替换为你的真实数据)
set.seed(123)
df <- data.frame(
  group = rep(c("Group1", "Group2", "Group3", "Group4"), each = 50),
  symptom1 = sample(c(0,1), 200, replace = TRUE, prob = c(0.7, 0.3)),
  symptom2 = sample(c(0,1), 200, replace = TRUE, prob = c(0.5, 0.5)),
  symptom3 = sample(c(0,1), 200, replace = TRUE, prob = c(0.6, 0.4))
)

# 数据转换与统计计算
df_long <- df %>%
  # 宽格式转长格式:将各症状列合并为symptom和positive两列
  pivot_longer(cols = starts_with("symptom"), names_to = "symptom", values_to = "positive") %>%
  # 按组别+症状分组,计算阳性率
  group_by(group, symptom) %>%
  summarise(
    total = n(),
    positive_num = sum(positive),
    pct = positive_num / total * 100  # 计算百分比
  ) %>%
  ungroup() %>%
  # 按组别分组,计算每个堆叠块的居中位置(累计百分比减去自身一半)
  group_by(group) %>%
  mutate(cum_pct = cumsum(pct) - pct / 2) %>%
  ungroup()

步骤2:绘制带百分比标签的堆叠条形图

使用处理后的数据绘图,通过geom_text将百分比标签放置在每个堆叠块的居中位置:

ggplot(df_long, aes(x = group, y = pct, fill = symptom)) +
  geom_bar(stat = "identity", width = 0.7) +  # 绘制堆叠条形
  # 添加百分比标签,保留1位小数
  geom_text(aes(label = sprintf("%.1f%%", pct)), y = df_long$cum_pct, size = 3.5) +
  # 自定义标签与主题
  labs(
    x = "组别",
    y = "阳性患者百分比",
    fill = "症状类型",
    title = "不同组别各症状阳性率分布"
  ) +
  scale_fill_brewer(palette = "Set2") +  # 自定义填充色(可选)
  theme_minimal()

关键说明

  • 若你的数据已是长格式(每行对应1个组别+1个症状的记录),只需保留group_by至mutate的统计计算部分。
  • sprintf("%.1f%%", pct)用于格式化百分比显示,可根据需求调整小数位数(如%.0f%%显示整数百分比)。
  • cum_pct的计算确保标签精准落在每个堆叠块的垂直中心,避免标签偏移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:45:57