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

求助:使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:31:01