如何将两个同X轴的ggplot图合并为对齐组合图?
用patchwork包实现ggplot垂直对齐组合
要将两个X轴刻度一致的ggplot合并为上下对齐的组合图(类似Kaplan-Meier曲线下方风险表的布局),最简便的方案是使用patchwork包——它专门针对ggplot对象设计,能自动对齐坐标轴,语法简洁直观。
1. 安装并加载依赖包
# 首次使用需安装 install.packages("patchwork") library(patchwork)
2. 优化绘图细节
为了让布局更紧凑美观,微调下方直方图的主题:移除重复的X轴标题,调整边距减少冗余空白:
# 重新定义plot2,优化主题 plot2 <- model_ci$duration$full %>% as.vector() %>% as.data.frame() %>% setNames("duration") %>% ggplot() + geom_histogram(aes(x = duration), breaks = seq(3, 10, by = 0.25), alpha = 0.2, col = "black") + geom_vline(data = data.frame(model_ci$duration$overview), aes(xintercept = recommendation), col = "purple", size = 2) + geom_vline(data = data.frame(model_ci$duration$overview), aes(xintercept = min), col = "blue", size = 1) + geom_vline(data = data.frame(model_ci$duration$overview), aes(xintercept = median), col = "red", size = 1) + geom_vline(data = data.frame(model_ci$duration$overview), aes(xintercept = max), col = "blue", size = 1) + xlim(3, 10) + xlab("") + # 移除X轴标题,避免与上方图重复 theme_bw() + theme(plot.margin = margin(5, 10, 5, 10)) # 调整边距,让上下图更紧凑
3. 垂直组合绘图
使用patchwork的/运算符直接拼接两个ggplot对象,系统会自动对齐X轴:
# 垂直组合:上方为plot1,下方为plot2 combined_plot <- plot1 / plot2 # 可选:添加整体标题并居中 combined_plot <- combined_plot + plot_annotation( title = "治疗时长与患者治愈比例分析", theme = theme(plot.title = element_text(hjust = 0.5, size = 14)) ) # 输出组合图 print(combined_plot)
备选方案:gridExtra包
如果不想使用patchwork,也可以用gridExtra包的grid.arrange函数实现垂直对齐:
install.packages("gridExtra") library(gridExtra) grid.arrange(plot1, plot2, ncol = 1, align = "v")
内容的提问来源于stack exchange,提问作者jackahall
相关产品推荐
相关产品推荐

