我想要一个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()
任何建议都将不胜感激。
答案 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]。