2014-10-07 74 views
2

的绘图功能保存情节一样PNG和PDF我想有PDF和PNG格式的一个情节:只有一个调用R中

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() 

任何建议,将不胜感激。

回答

4

您可以使用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

谢谢你,我想你错过了dev.control(“启用”),我补充说。 – 2014-10-07 10:19:47

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命令作为参数,并简单地为每个设备评估一次[=绘图]。