我正在尝试使用图形设备在函数中保存ggplot。但我发现代码生成空图。下面是一个非常简单的例子。
library(ggplot2)
ff <- function(){
jpeg("a.jpg")
qplot(1:20, 1:20)
dev.off()
}
ff()
如果我只运行该功能的内容,一切都很好。我知道使用ggsave()会做我想要的事情,但我只是想知道为什么jpeg()加上dev.off()不起作用。我尝试使用不同版本的R,问题仍然存在。
答案 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的错误。