R 使用热图()作为ggsave()的绘图输入时出错

R 使用热图()作为ggsave()的绘图输入时出错,r,ggplot2,heatmap,R,Ggplot2,Heatmap,我想在ggplot2::ggsave()中保存stats::heatmap()的输出,但输出不是绘图,我收到一个错误。 代码如下: data("iris") col<- colorRampPalette(c("blue", "white", "red"))(20) ggsave(filename = "heatmap.png", plot = heatmap(x = cor(iris[,-5]) , col = col, symm = TRUE),device = "png", dpi

我想在ggplot2::ggsave()中保存stats::heatmap()的输出,但输出不是绘图,我收到一个错误。 代码如下:

data("iris")
col<- colorRampPalette(c("blue", "white", "red"))(20)

ggsave(filename = "heatmap.png", plot = heatmap(x = cor(iris[,-5])  , col = col, symm = TRUE),device = "png", dpi = 450)
数据(“iris”)
colggsave()的语法是

ggsave(filename, plot = last_plot(), device = NULL, path = NULL,
  scale = 1, width = NA, height = NA, units = c("in", "cm", "mm"),
  dpi = 300, limitsize = TRUE, ...)
要存储的绘图必须作为第二个参数传递。为此,必须能够将绘图指定给变量。这可以通过
ggplot()
创建的绘图来完成:

p2
现在是一个
列表,而不是一个绘图:

p2
## $rowInd
## [1] 2 1 3 4
## 
## $colInd
## [1] 2 1 3 4
##  
## $Rowv
## NULL
## 
## $Colv
## NULL
因此,将
p2
传递到
ggsave()
将不起作用,因为它实际上不包含绘图

但仍然可以使用图形设备将底图存储在文件中

例如,您可以创建一个
png
-文件,如下所示:

png(filename = "heatmap.png")
heatmap(x = cor(iris[,-5])  , col = col, symm = TRUE)
dev.off()
还有其他类似的设备,例如,
jpeg()
pdf()
,和
tiff()

您可以在
downloadHandler()
中使用该设备,如下所示:

output$downloadData <- downloadHandler(
    filename = "heatmap.png",
    content = function(file) {
      png(filename = file)
      col<- colorRampPalette(c("blue", "white", "red"))(20)
      heatmap(x = cor(iris[,-5])  , col = col, symm = TRUE)
      dev.off()
    }
  )

output$downloadData只需完成@Stibu的全面回答,就可以让png()与shinny::downloaddhandler()一起工作:


output$download\u我非常感谢您的解释性和全面的回答,但正如我所说的,我想在一个闪亮的applet中使用它,使用
downloadHandler()
png()
似乎无法使用它。其余的都是完全正确的,它肯定会帮助其他不知道
ggsave()
参数等的人。我可以在
downloadHandler()中使用
png()
,不会有问题。到底是什么不起作用?所以我不得不说,我不能让downloadHandler()起作用。你能给我提供png()和downloadHandler()的工作代码吗?好的,现在可以了!我发现我在png()中使用downloadHandler()的file参数的方式是错误的。谢谢斯蒂布!我添加了代码作为另一个答案,但是如果您编辑您的答案并将downloadhandler()代码附加到其中,我会删除我的答案。
png(filename = "heatmap.png")
heatmap(x = cor(iris[,-5])  , col = col, symm = TRUE)
dev.off()
output$downloadData <- downloadHandler(
    filename = "heatmap.png",
    content = function(file) {
      png(filename = file)
      col<- colorRampPalette(c("blue", "white", "red"))(20)
      heatmap(x = cor(iris[,-5])  , col = col, symm = TRUE)
      dev.off()
    }
  )
output$download_correlation <- downloadHandler(
             filename = "correlation_plot.png",
             content = function(file) {

                     #preparing the dataset from an external function
                     corr_data <- correlation_data() 


                     #colors of the heatmap
                     col<- colorRampPalette(c("blue", "white", "red"))(20)

                     png(file)
                     heatmap(x = cor(x =as.matrix(corr_data)) , col = col, symm = TRUE)
                     dev.off()                   
     )