只需调用R中的绘图功能,即可将绘图保存为PNG和PDF

时间:2014-10-07 08:49:29

标签: r pdf graphics plot png

我想要一个pdf和png格式的情节:

pdf("test.pdf")
plot(sin, -pi, 2*pi)
dev.off()

png("test.png")
plot(sin, -pi, 2*pi)
dev.off()

但是,我正在寻找一个技巧(最好不要加载一个新包),其中只能调用一次绘图函数:

#no plot in pdf!
pdf("test1.pdf"); png("test1.png")
plot(sin, -pi, 2*pi)
dev.off(); dev.off()

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:5)

您可以将dev.copy()用于您的目的。例如:

pdf("test.pdf")
a<-dev.cur()
png("test.png")
dev.control("enable")
plot(sin, -pi, 2*pi)
dev.copy(which=a)
dev.off()
dev.off()

您通过pdf注意dev.cur设备,然后将地图从png设备复制到pdf设备。

答案 1 :(得分:0)

不确定这种方法是否比@nicolas答案有任何优势,它在技术上不回答你的问题,但它肯定证明了R's non-standard evaluation的好处并以一种干净的方式解决了你的问题:

save_plot <- function(p, file_name="test"){
  p <- substitute(p)
  pdf(paste0(file_name,".pdf"))
  eval(p)
  dev.off()

  png(paste0(file_name,".png"))
  eval(p)
  dev.off()

  eval(p) # if you don't also want to see your plot, change this to `invisible()`
}

save_plot(plot(sin, -pi, 2*pi))

在englisch中:编写自己的函数,将未评估的plot命令作为参数,并为每个设备简单地计算一次[= plots]。