求助:使用ggsave保存含risk.table的ggsurvplot仅导出风险表
解决ggsave仅保存risk.table的问题
问题根源是ggsurvplot()返回的是包含生存曲线、风险表等元素的列表对象,不是单一的ggplot对象,直接调用ggsave()会默认只保存列表最后一个元素(也就是risk.table)。下面是三种可行的解决方法:
方法1:用recordPlot捕获完整绘图
先打印绘图并记录整个绘图对象,再用ggsave保存:
library(data.table) library(survival) library(survminer) library(grid) # 构造数据 OS <- c(c(1:100), seq(1, 75, length = 50), c(1:50)) dead <- rep(1, times = 200) variable <- c(rep(0, times = 100), rep(1, times = 50), rep(2, times = 50)) dt <- data.table(OS = OS, dead = dead, variable = variable) survfit <- survfit(Surv(OS, dead) ~ variable, data = dt) # 生成并打印绘图,捕获完整对象 p <- ggsurvplot(survfit, data = dt, risk.table = TRUE) print(p) plot_obj <- recordPlot() # 保存完整图 ggsave("test.png", plot = plot_obj, width = 10, height = 8)
方法2:组合曲线和风险表为gtable
把生存曲线和风险表手动组合成一个可保存的gtable对象:
library(data.table) library(survival) library(survminer) library(gridExtra) # 数据和生存分析代码同上 dt <- data.table(OS = OS, dead = dead, variable = variable) survfit <- survfit(Surv(OS, dead) ~ variable, data = dt) p <- ggsurvplot(survfit, data = dt, risk.table = TRUE) # 组合绘图元素 combined_plot <- arrangeGrob(p$plot, p$table, ncol = 1, heights = c(3, 1)) # 保存 ggsave("test.png", plot = combined_plot, width = 10, height = 8)
方法3:调用survminer专属ggsave
survminer包自带适配ggsurvplot的ggsave函数,直接指定绘图对象即可:
p <- ggsurvplot(survfit, data = dt, risk.table = TRUE) survminer::ggsave("test.png", p)
注:如果之前加载过ggplot2的ggsave,要明确用survminer::ggsave()避免函数冲突。
内容的提问来源于stack exchange,提问作者gernophil
相关产品推荐
相关产品推荐

