如何显示循环中用finalfit::hr_plot生成的可视化图?
解决Rmd中批量展示
hr_plot生成的TableGrob对象问题 hr_plot()返回的是**gtable(TableGrob)**对象,而非标准ggplot对象,普通的print()或直接调用无法触发渲染,需要借助grid包的grid.draw()函数来完成可视化。以下是具体解决方法:
方法一:遍历列表逐个绘制
在Rmd代码块中,遍历存储图的列表,用grid.draw()逐个渲染:
require(survival) require(finalfit) require(ggplot2) require(grid) # 必须加载grid包 # 生成可复现数据 set.seed(123) var0 <- sample(0:1, 100, replace = T) var1 <- sample(c("A", "B", "C"), 100, replace = T) var2 <- sample(c("X", "Y", "Z"), 100, replace = T) var3 <- sample(500:2000, 100) mydf <- data.frame(var0, var1, var2, var3) dependent <- "Surv(time = var3, event = var0)" varlist <- c("var1", "var2") hrplots <- list() # 生成图并存入列表 for (i in varlist){ hrplots[[i]] <- hr_plot(mydf, dependent, i, table_text_size = 5) } # 遍历列表绘制所有图 for (plot_obj in hrplots) { grid.draw(plot_obj) cat("\n\n") # 添加空行分隔不同图 }
方法二:组合多图为整体展示
如果希望将多个图排列在一起展示,可使用gridExtra::grid.arrange():
require(gridExtra) # 按单列排列,ncol=2可改为双列 grid.arrange(grobs = hrplots, ncol = 1)
方法三:生成时直接打印(无需存列表)
若不需要保留图对象,仅需在Rmd中展示,可直接在循环内打印:
for (i in varlist){ p <- hr_plot(mydf, dependent, i, table_text_size = 5) grid.draw(p) cat("\n\n") }
关键说明
- 必须加载
grid包,grid.draw()是触发gtable对象渲染的核心函数 - 在Rmd代码块中,gtable对象不会自动渲染,必须显式调用
grid.draw() - 设置
set.seed()可保证数据生成的一致性,便于复现
内容的提问来源于stack exchange,提问作者Reader 123
相关产品推荐
相关产品推荐

