如何将 pheatmap 图绘制到屏幕并保存到文件

Ale*_*lex 3 r ggplot2 pheatmap

我正在使用 pheatmap 包。默认情况下,它将绘图绘制到屏幕上。就我而言,这意味着在 R studio 的 R markdown notebook 中输出。但我也想保存到文件中。如果我将它保存到一个文件中,并为其提供filename=参数,它就不会绘制到屏幕上(R 笔记本)。有没有办法让这两件事都发生?更一般地说,对于我想在屏幕上保存和显示的任何情节(ggplot2)?

MrF*_*ick 7

pheatmap 的作者似乎并没有让这变得非常容易。但这是您需要在两个单独的步骤中完成的事情。首先,我们使用来自?pheatmap帮助页面的示例数据

test = matrix(rnorm(200), 20, 10)
test[1:10, seq(1, 10, 2)] = test[1:10, seq(1, 10, 2)] + 3
test[11:20, seq(2, 10, 2)] = test[11:20, seq(2, 10, 2)] + 2
test[15:20, seq(2, 10, 2)] = test[15:20, seq(2, 10, 2)] + 4
colnames(test) = paste("Test", 1:10, sep = "")
rownames(test) = paste("Gene", 1:20, sep = "")
Run Code Online (Sandbox Code Playgroud)

我们可以渲染绘图并保存结果

xx <- pheatmap(test)
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过打开图形设备并按照在主函数中完成的方式重新绘制结果来将其输出到文件

save_pheatmap_pdf <- function(x, filename, width=7, height=7) {
   stopifnot(!missing(x))
   stopifnot(!missing(filename))
   pdf(filename, width=width, height=height)
   grid::grid.newpage()
   grid::grid.draw(x$gtable)
   dev.off()
}
save_pheatmap_pdf(xx, "test.pdf")
Run Code Online (Sandbox Code Playgroud)

这个包直接使用网格库而不使用,ggplot2所以该包的解决方案会有所不同。该ggsave功能可以更轻松地将最后绘制的绘图保存到文件中。