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

R ggplot堆叠条形图保留堆叠绝对值y轴转百分比显示问题

百分百堆叠条形图Y轴转百分比解决方案

核心修改点

你只需要在原有代码基础上做少量调整即可满足需求,无需额外重构占比数据框,可根据实际需求选择以下两种方案:

方案1:实现真100%堆叠(条形总高度统一为100%,推荐)

  • 给geom_bar()添加position = "fill"参数,实现100%堆叠效果
  • 新增scale_y_continuous()配置,将y轴比例值转换为百分比刻度显示
  • 堆叠内部的绝对计数文本不需要调整,原有stat_count逻辑可直接保留

完整修改后代码:

event_labels <- c("T0\nBaseline", "T1\nDay 7", "T2\nWeek 6", "T3\nWeek 12", "T4\n6 Months\nFollow-Up")
names(event_labels) <- c("t0", "t1", "t2", "t3", "t4")

rem_eular_response <- rem_eular_data %>%
  ggplot(aes(x=gruppe,
             fill=factor(number_ordered))) +
  # 新增position参数实现100%堆叠
  geom_bar(position = "fill") +
  stat_count(geom = "text",
             aes(label = (..count..)),
             position = position_stack(vjust = 0.5),
             size = 4) +
  facet_wrap(~event,
            scales="free",
            ncol=3,
            labeller = labeller(event = event_labels)) +
  labs(title ="",
       fill="") +
  ylab("Patients achieving response [%]") + 
  xlab("") + 
  theme_bw()+
  theme(strip.background=element_rect(fill="lightgrey", 
                                      color="transparent"),
        panel.border = element_blank(),
        axis.line = element_line(color="black",
                                 size=0.2),
        strip.text = element_text(face="bold"),
        legend.position = "bottom",
        legend.title=element_text())+
  scale_x_discrete(labels=c('DGE', 'Fasting'))+
  # 新增y轴百分比刻度配置,不需要scales包可以替换为自定义函数
  scale_y_continuous(labels = scales::percent_format(accuracy = 1),
                     breaks = seq(0,1,0.25)) +
  scale_fill_brewer(palette = 'Accent',
                    na.value = "grey70",
                    labels=c('Good Responder', 'Moderate Responder', 'Non-Responder',
                             'Missing'))

若不想引入scales包,可将scale_y_continuous替换为以下写法:

scale_y_continuous(labels = function(x) paste0(x*100, "%"),
                   breaks = seq(0,1,0.25))

方案2:仅修改y轴刻度(保持原条形高度不变,仅数值转换)

如果不需要条形总高度统一为100%,只想按照你提到的「刻度值乘4转百分比」的逻辑修改,不需要调整geom_bar,直接新增以下配置即可:

scale_y_continuous(labels = function(x) paste0(x*4, "%"),
                   breaks = seq(0,25,5))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:24:03