如何用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
相关产品推荐
相关产品推荐

