如何用ggarrange组合带风险表的多面板生存曲线?
解决survminer带风险表生存曲线的组合问题
问题描述
我使用survminer包生成了包含风险表的生存曲线对象sequence和histology,单独用ggarrange组合其中的生存曲线(即对象的$plot元素)可以成功,但直接组合整个包含风险表的对象却无法运行。已知ggsurvplot的输出是包含绘图和表格的列表,而ggarrange仅支持grob对象作为输入,请问如何将绘图和表格元素合并为可被ggarrange组合的grob?
解决方案
ggsurvplot返回的列表包含plot(生存曲线)和table(风险表)等核心元素,我们需要先将每个对象的生存曲线与风险表合并为单个grob,再用ggarrange进行组合。以下是具体实现步骤:
1. 加载所需包(未安装需先执行安装命令)
install.packages(c("gridExtra", "ggplot2", "ggpubr", "survminer")) library(gridExtra) library(ggplot2) library(ggpubr) library(survminer)
2. 读取数据
sequence <- readRDS("sequence.rds") histology <- readRDS("histology.rds")
3. 将单个生存曲线与风险表合并为grob
通过arrangeGrob将每个对象的生存曲线和风险表垂直排列,可调整高度比例让曲线部分占比更合理:
# 合并sequence的曲线与风险表 sequence_combined <- arrangeGrob( sequence$plot, sequence$table, ncol = 1, heights = c(3, 1) # 曲线与风险表高度比为3:1,可按需调整 ) # 合并histology的曲线与风险表 histology_combined <- arrangeGrob( histology$plot, histology$table, ncol = 1, heights = c(3, 1) )
4. 组合两个带风险表的生存曲线grob
现在可以用ggarrange直接组合这两个已合并的grob对象:
combined_final <- ggarrange( sequence_combined, histology_combined, labels = c("A", "B"), font.label = list(size = 24), ncol = 2, nrow = 1 ) # 查看最终组合图 combined_final
原理说明
ggsurvplot返回的是包含多个元素的列表,而非单一的grob或ggplot对象,因此无法直接被ggarrange识别。通过arrangeGrob将列表中的plot和table合并为单个grob后,就符合ggarrange的输入要求,从而实现带风险表的生存曲线的横向/纵向组合。
内容的提问来源于stack exchange,提问作者Joe Erinjeri
相关产品推荐
相关产品推荐

