将ggplot对象保存为环境中的图像作为对象/值

时间:2018-05-19 02:48:50

标签: r image-processing ggplot2

我有一个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)

感谢您的帮助!

2 个答案:

答案 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)时,我看到以下内容:

enter image description here

即使原始plot看起来像这样:

enter image description here

我不确定出现了什么问题,但希望对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")