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

如何用ggplot绘制堆叠+分组组合条形图?解决分组分离问题

解决堆叠+分组条形图的问题

要实现每个时间点下Group 1和Group 2条形并排,且每个分组内按CTCAE_1类别堆叠的效果,你需要放弃facet_grid,转而通过position_dodge实现分组逻辑,同时保留堆叠规则。具体修改如下:

修正后的代码

library(ggplot2)

# 将Group和CTCAE_1转为因子,优化分组与图例显示
data2$Group <- as.factor(data2$Group)
data2$CTCAE_1 <- as.factor(data2$CTCAE_1)

ggplot(data2, aes(x = Timepoint, 
                  y = percentage_of_patients_CTCAE_1, 
                  fill = CTCAE_1,
                  group = interaction(Group, CTCAE_1))) +
  geom_bar(stat = "identity", 
           position = position_dodge(width = 0.8)) +
  labs(x = "时间点", y = "患者百分比", fill = "CTCAE分级") +
  scale_x_continuous(breaks = c(0,1,2)) +
  theme_minimal()

关键修改说明

  • 移除facet_grid(~Group):避免将两个Group拆分为独立面板,确保同时间点的分组条形在同一轴上展示。
  • 添加group = interaction(Group, CTCAE_1):明确告诉ggplot同时按Group和CTCAE_1进行分组,保证堆叠和并排逻辑同时生效。
  • 使用position_dodge(width = 0.8):控制同一时间点下Group 1和Group 2的条形间距,实现并排效果,width参数可根据需求调整。
  • 转换变量类型:将Group和CTCAE_1转为因子,避免连续型变量导致的图例样式异常。

数据集验证

你的数据集结构如下:

data2 <- structure(
  list(
    Group = c(1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1),
    Timepoint = c(0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2),
    CTCAE_1 = c(0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2),
    percentage_of_patients_CTCAE_1 = c(
      86.6666666666667, 6.66666666666667, 33.3333333333333,
      86.6666666666667, 73.3333333333333, 73.3333333333333,
      6.66666666666667, 20, 33.3333333333333,
      6.66666666666667, 20, 13.3333333333333,
      6.66666666666667, 6.66666666666667, 33.3333333333333
    )
  ),
  row.names = c(NA,-15L),
  class = c("tbl_df", "tbl", "data.frame")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:58:07