本文介绍了将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
中存储了一个绘图。只需运行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
因此,将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()的绘图输入时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!