在函数中保存ggplot

时间:2011-08-12 01:05:38

标签: r ggplot2

我正在尝试使用图形设备在函数中保存ggplot。但我发现代码生成空图。下面是一个非常简单的例子。

library(ggplot2)
ff <- function(){
  jpeg("a.jpg")
  qplot(1:20, 1:20)
  dev.off()
}
ff()

如果我只运行该功能的内容,一切都很好。我知道使用ggsave()会做我想要的事情,但我只是想知道为什么jpeg()加上dev.off()不起作用。我尝试使用不同版本的R,问题仍然存在。

2 个答案:

答案 0 :(得分:43)

您应该使用ggsave而不是jpeg(); print(p); dev.off()序列。 ggsave是一个包装器,可以完全按照您的功能执行操作,但它提供了更多选项和多功能性。您可以明确指定输出类型,例如jpg或pdf,或者它会从您的文件扩展名猜测。

所以你的代码可能会变成:

p <- qplot(1:20, 1:20)
ggsave(filename="a.jpg", plot=p)

有关详细信息,请参阅?ggsave


您的代码中的原始行为无效的原因确实是一个经常被问到的问题(在stackoverlflow以及R FAQs on CRAN上)。您需要插入print语句来打印图表。在交互式控制台中,打印在后台静默执行。

答案 1 :(得分:16)

必须打印这些图:

ff <- function(){
  jpeg("a.jpg")
  p <- qplot(1:20, 1:20)
  print(p)
  dev.off()
}
ff()

这是一个非常common的错误。