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
相关产品推荐
相关产品推荐

