R: guardar múltiples ggplots usando un bucle for

Quiero automatizar la generación de varios ggplots:

Conjunto de datos generics

mydata<-data.frame(matrix(rnorm(100),ncol=5)) names(mydata)<-c("Tijd","X1","X2","X3","X4") 

Especifique las variables a incluir:

 Start=2 Stop=5 

Lista para guardar las plots en:

 gvec<-vector("list",length=length(Start:Stop)) 

Crear ttwigs:

 for(i in Start:Stop){ graphy<-ggplot(mydata,aes_string(x="Tijd",y=names(mydata)[i]))+geom_point()+mytheme gvec[[i-Start+1]]<-graphy } 

Guardar plots:

 for(i in Start:Stop){ tiff(paste0("Test/Residu/Plots/Prei/mydata.",names(mydata)[i],"09.14.tiff"),width=720,height=720) gvec[[i-Start+1]] graphics.off() } 

La lista de plots se genera; Puedo guardar los trazados manualmente también. Sin embargo, utilizando el último ciclo, los archivos generados están en blanco. No puedo entender la razón de esto.

De acuerdo con la sugerencia de Roland, intenté print(gvec[[i-Start+1]]) pero todavía obtengo archivos en blanco como salida.

Aquí hay un ejemplo completamente reproducible de crear ggplots en un bucle.

 # Plot separate ggplot figures in a loop. library(ggplot2) # Make list of variable names to loop over. var_list = combn(names(iris)[1:3], 2, simplify=FALSE) # Make plots. plot_list = list() for (i in 1:3) { p = ggplot(iris, aes_string(x=var_list[[i]][1], y=var_list[[i]][2])) + geom_point(size=3, aes(colour=Species)) plot_list[[i]] = p } # Save plots to tiff. Makes a separate file for each plot. for (i in 1:3) { file_name = paste("iris_plot_", i, ".tiff", sep="") tiff(file_name) print(plot_list[[i]]) dev.off() } # Another option: create pdf where each page is a separate plot. pdf("plots.pdf") for (i in 1:3) { print(plot_list[[i]]) } dev.off() 

enter image description here

También puede usar la función ggplot2 biblioteca ggplot2 .

 library(ggplot2) data("iris") # list of values to loop over uniq_species = unique(iris$Species) # Loop for (i in uniq_species) { temp_plot = ggplot(data= subset(iris, Species == i)) + geom_point(size=3, aes(x=Petal.Length, y=Petal.Width )) + ggtitle(i) ggsave(temp_plot, file=paste0("plot_", i,".png"), width = 14, height = 10, units = "cm") } 

Puede crear y exportar los gráficos dentro del mismo ciclo. El código combinado sería:

 for(i in Start:Stop){ graphy<-ggplot(mydata,aes_string(x="Tijd",y=names(mydata)[i]))+geom_point()+mytheme tiff(paste0("Test/Residu/Plots/Prei/mydata.",names(mydata)[i],"09.14.tiff"),width=720,height=720) print(graphy) dev.off() } 

Para un caso general con datos astackdos, donde la variable de id corresponde al subgrupo (país, individuo, etc.)):

 for (i in 1:10) { mydata_id <- subset(mydata, id == i) # subselect group p <- ggplot(mydata_id, aes(x, y)) + geom_line() # create graph png(paste("plot_", i, ".png", sep = ""), width=600, height=500, res=120) # start export print(p) dev.off() # finish export }