2013-10-10 13 views
11

Tôi có một số mã trong R mà tạo ra một file pdf nhiều trang:R pdf() sử dụng bên trong một function()

pdf("myplot.pdf", width=8.5, height=5) 

My.Plot(my.data, var1, var2) 
My.Plot(my.data, var3, var2) 
My.Plot(my.data, var4, var2) 

dev.off() 

My.Plot() chỉ là một chức năng phân tích các dữ liệu cần thiết và sau đó sử dụng ggplot để tạo biểu đồ

Ở trên chỉ hoạt động tốt. Tuy nhiên, khi tôi đặt mã này trong một hàm, không có ô nào được tạo và tệp PDF đầu ra không thể đọc/mở được.

generate.PDF <- function(my.data) {  
    pdf("myplot.pdf", width=8.5, height=5) 

    My.Plot(my.data, var1, var2) 
    My.Plot(my.data, var3, var2) 
    My.Plot(my.data, var4, var2) 

    dev.off() 
} 
+0

Vấn đề này không phải là tái sản xuất. Bạn rõ ràng không cho chúng tôi thấy điều gì đó quan trọng. – Thomas

+2

Trong tất cả các khả năng bạn đang nộp để lưu ý lời khuyên của R-FAQ để sử dụng các chức năng 'in()' xung quanh 'lưới' đồ họa. –

+0

@ 42 nghĩa là * không chú ý ... – micstr

Trả lời

9

Khi ở trong một hàm, bạn cần phải gọi print() chức năng để thực sự vẽ trên vải, như vậy:

x <- runif(20,10,20) 
y <- runif(20,30,50) 
data<-data.frame(x,y) 
generate.PDF <- function(data) {  
    pdf("/home/aksel/Downloads/myplot.pdf", width=8.5, height=5,onefile=T) 
    plot1 <- plot(x,y) 
    plot2 <- plot(y,x) 
    plot3 <- plot(x,y*2) 
    print(plot1) 
    print(plot2) 
    print(plot3) 
    dev.off() 
} 
generate.PDF(data) 
+0

Và, nếu bạn đang sử dụng ggplot, luôn có 'ggsave()' – ako

+1

print() đã làm công việc tốt. Tôi không thể sử dụng ggsave(), vì nó không làm nhiều trang PDF –

Các vấn đề liên quan