我有一个ggplot对象。我们称之为plot
。我想将其转换为png格式,但我不想将其保存到本地驱动器上的文件中。我试图使用那个png对象,但我想保留环境中的所有内容。我发现的所有内容(包括ggsave
)似乎都会强制首先将图像另存为本地驱动器上的文件。我知道图像文件可以存储为值,但我似乎无法克服"另存为"图像和"导入"图像步骤。
这里有一些可重复性的代码:
library(tidyverse)
df <- as.data.frame(Titanic)
gg <- ggplot(data = df, aes(x = Survived, y = Freq))
plot <- gg + geom_bar(stat = "identity")
现在,我想将plot
转换为png转换为png
,而无需将其保存到文件中。类似的东西:
png <- save.png(plot)
感谢您的帮助!
答案 0 :(得分:2)
看起来这里的目标是将plot
(ggplot对象)直接转换为可以使用magick
包中的函数进行操作的Magick图像。像这样:
mplot = image_graph(width=400, height=500)
plot
dev.off()
image_graph
打开一个图形设备,该图形设备会生成Magick图像并将其分配给mplot
,以便您可以在您的环境中使用该对象。然后,当您在控制台中键入mplot
时,您会看到以下内容:
format width height colorspace matte filesize density 1 PNG 400 500 sRGB TRUE 0 +72x+72
但是,当我尝试在控制台中显示mplot
图像(类型mplot
)时,我看到以下内容:
即使原始plot
看起来像这样:
我不确定出现了什么问题,但希望对magick
有更多熟悉度的人会过时并提供解决方案。
答案 1 :(得分:0)
我遇到了类似的问题,并遵循使用magick
的@ eipi12方法。下面的代码应该可以工作:
library(ggplot2)
library(magrittr)
ggsave_to_variable <- function(p, width = 10, height = 10, dpi = 300){
pixel_width = (width * dpi) / 2.54
pixel_height = (height * dpi) / 2.54
img <- magick::image_graph(pixel_width, pixel_height, res = dpi)
on.exit(utils::capture.output({
grDevices::dev.off()}))
plot(p)
return(img)
}
p <- data.frame(x = 1:100, y = 1:100) %>%
ggplot(aes(x = x, y = y)) +
geom_line()
my_img <- ggsave_to_variable(p)
my_img %>%
magick::image_write("my_img.png")