2013-10-10 14 views
11

ho qualche codice R che genera un file pdf multipagina:R pdf() l'utilizzo all'interno di una funzione()

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() è solo una funzione che analizza i dati necessari e poi usa ggplot per creare un grafico

Quanto sopra funziona bene. Tuttavia, quando inserisco questo codice in una funzione, non vengono generati grafici e il PDF di output non può essere letto/aperto.

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

Questo problema non è riproducibile. Ovviamente non ci stai mostrando qualcosa di critico. – Thomas

+2

Con tutta probabilità si sta prendendo in considerazione il consiglio della R-FAQ di usare 'print()' attorno alle funzioni grafiche della griglia. –

+0

@ 42 significa * non prestare attenzione ... – micstr

risposta

9

Quando in una funzione, è necessario chiamare la funzione print() per dipingere in realtà sulla tela, in questo modo:

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

E, se si utilizza ggplot, c'è sempre 'ggsave()' – ako

+1

print() ha fatto il lavoro bene. Non posso usare ggsave(), dato che non fa PDF multipagina –