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

officeR包body_add_gg函数无法兼容ggsurvplot对象的技术问询

解决ggsurvplot无法用officer的body_add_gg写入docx的问题

问题根源在于ggsurvplot()返回的不是标准的ggplot对象,而是一个包含多个元素(生存曲线、风险表、图例等)的列表,直接传入body_add_gg()会因为类型不匹配报错。手动修改class没用,因为对象内部结构根本不是ggplot的结构。

不需要改用传统R绘图,用以下方法就能解决:

方法1:提取ggsurvplot中的核心ggplot对象

ggsurvplot的结果里有个plot元素,这才是真正的ggplot对象,直接提取这个元素传入body_add_gg()即可:

# 加载必要包
library(survminer)
library(survival)
library(officer)

# 生成生存分析模型和ggsurvplot对象
fit <- survfit(Surv(time, status) ~ sex, data = lung)
surv_plot <- ggsurvplot(fit, data = lung)

# 创建docx文档并写入生存曲线
doc <- read_docx()
doc <- body_add_gg(doc, value = surv_plot$plot, width = 6, height = 4)
# 保存文档
print(doc, target = "survival_report.docx")

方法2:同时添加风险表(若需要)

如果你的ggsurvplot包含风险表(通过risk.table = TRUE开启),可以提取table元素单独添加到文档:

# 生成带风险表的ggsurvplot
surv_plot_with_table <- ggsurvplot(fit, data = lung, risk.table = TRUE)

# 先添加生存曲线,再添加风险表
doc <- read_docx()
doc <- body_add_gg(doc, value = surv_plot_with_table$plot, width = 6, height = 4)
doc <- body_add_gg(doc, value = surv_plot_with_table$table, width = 6, height = 2)
print(doc, target = "survival_with_table.docx")

方法3:合并生存曲线与风险表为单个图

如果希望把曲线和风险表作为一个整体插入,用ggpubr::ggarrange()拼接后再写入:

library(ggpubr)

# 合并曲线和风险表
combined_plot <- ggarrange(
  surv_plot_with_table$plot, 
  surv_plot_with_table$table, 
  ncol = 1, 
  nrow = 2, 
  heights = c(3, 1)  # 调整两者高度比例
)

# 写入合并后的图
doc <- read_docx()
doc <- body_add_gg(doc, value = combined_plot, width = 6, height = 5)
print(doc, target = "combined_survival_plot.docx")

内容的提问来源于stack exchange,提问作者bouftonmouth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:45:10