2014-10-07 46 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命令作爲參數,並簡單地爲每個設備評估一次[=繪圖]。