本文介绍了将heatmap()用作ggsave()的绘图输入时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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)
现在,当代码实际工作并将heatmap.png保存在R工作目录中时,它也返回一个错误。

我想是因为heatmap()的输出不是一个图,而是一个列表。

由于我使用ggsave()作为downloadHandler()中的一部分,因此该错误会中断下载/保存过程。

感谢您的帮助

推荐答案

ggsave()的语法为

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()

创建的绘图来完成
p <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point()
class(p)
## [1] "gg"     "ggplot"

这段代码没有显示任何绘图,但它实际上在p中存储了一个绘图。只需运行pprint(p)即可呈现它。

基本绘图函数不同。他们直接制造了一个情节作为副作用。因此,即使输出被分配给一个变量:

,以下代码也将显示该图
p2 <- heatmap(x = cor(iris[,-5])  , col = col, symm = TRUE)

p2现在是list而不是绘图:

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()
    }
  )

这篇关于将heatmap()用作ggsave()的绘图输入时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-11 19:04