gpt4 book ai didi

r - 使用 heatmap() 作为 ggsave() 的绘图输入时出错

转载 作者:行者123 更新时间:2023-12-04 11:21:25 25 4
gpt4 key购买 nike

我想在 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)

现在,虽然代码实际工作并保存了 heatmap.png在 R 工作目录中,它也会返回错误。

Saving 3.74 x 8.49 in image Error in UseMethod("grid.draw") : no applicable method for 'grid.draw' applied to an object of class "list"



我认为是因为 heatmap() 的输出不是一个情节,它是一个列表。

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

我很感激你的帮助

最佳答案

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中存储了一个情节。 .你可以通过运行 p 来渲染它或 print(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

所以,路过 p2ggsave()不会工作,因为它实际上并不包含情节。

但是仍然可以使用图形设备将基本图存储在文件中。

例如,您可以创建一个 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()
}
)

关于r - 使用 heatmap() 作为 ggsave() 的绘图输入时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46499719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com