2017-01-15 28 views
1

Я хотел бы сохранить несколько ggplots как jpegs через цикл for. Но когда я попытался адаптировать код, который я написал для основной команды plot, я не получаю никакого вывода (ничего не сохраняется в моем рабочем каталоге).Использование цикла for для сохранения нескольких ggplot как jpeg

Для примера, это прекрасно работает:

library(cowplot) 
library(ggplot) 

X<-c(1,2,3,4,5,6,7,8,9) 
Y1<-c(2,3,4,4,3,2,4,5,6) 
Y2<-c(3,4,5,3,2,1,1,2,3) 
Y3<-c(4,5,6,7,8,9,8,7,6) 

DF<-data.frame(X,Y1,Y2,Y3) 



for(i in 1:3){ 


    jpeg(paste(i,".jpeg",sep="")) 
    plot(DF[,1],DF[,i+1]) 
    dev.off() 
} 

Я в конечном итоге получить три Jpeg файлы, сохраненные в моем рабочем каталоге.

Я не уверен, как правильно индексировать вызов ggplot здесь для меня, но даже это должно вернуть 3 экземпляров одного и того же участка:

for(i in 1:3){ 


    jpeg(paste(i,".jpeg",sep="")) 
    ggplot(data=DF,aes(x=X,y=Y1))+geom_line() 
    dev.off() 
} 

В конце концов, я надеялся объединить несколько участков на одном формате JPEG, а затем сохранить несколько файлов JPEG, как это:

for(i in 1:3){ 


    jpeg(paste(i,".jpeg",sep="")) 
    A<-ggplot(data=DF,aes(x=X,y=Y1))+geom_line() 
    B<-ggplot(data=DF,aes(x=X,y=Y2))+geom_line() 
    C<-ggplot(data=DF,aes(x=X,y=Y3))+geom_line() 
    plot_grid(A,B,C) 

    dev.off() 
} 

Так этот участок также должен вернуть 3 экземпляров одного и того же сюжета, все с разными индексированных имен файлов. Но опять же, я ничего не получаю.

Итак, мой вопрос в том, почему существует разница между общим графиком и ggploting в этом цикле. И как можно сохранить mutliple jpegs из ggplots, как указано выше?

+2

Смотрите 'ggsave()'? –

+0

Но я могу сэкономить один сюжет, как и выше вне цикла for. Так зачем мне ggsave внутри forloop, но не снаружи на одном звонке? – Vinterwoo

+1

Думаю, вам нужен вызов 'print()' для вызовов 'ggplot' и' plot_grid' или уже упомянутый 'ggsave'. im не совсем уверен, но я предполагаю, что 'ggplot' создает объекты ggplot, которые, если вы хотите сохранить его в файле, должны быть явно' print'-ed ... – davidski

ответ

1

Как о

library(gridExtra) # gridExtra::arrangeGrob 

for(i in 1:3) { 

    jpeg(paste0(i, ".jpg")) 
    A <- ggplot(data = DF, aes(x = X, y = Y1)) + geom_line() 
    B <- ggplot(data = DF, aes(x = X, y = Y2)) + geom_line() 
    C <- ggplot(data = DF, aes(x = X, y = Y3)) + geom_line() 
    grid.arrange(arrangeGrob(A, B, C, ncol = 3)) 
    dev.off() 

} 

Примечание: это решение не вызывает побочных аннотации cowplot ("А", "В", "С").

0

используя код:

for(i in 1:3){ 


    jpeg(paste(i,".jpeg",sep="")) 
    A<-ggplot(data=DF,aes(x=X,y=Y1))+geom_line() 
    B<-ggplot(data=DF,aes(x=X,y=Y2))+geom_line() 
    C<-ggplot(data=DF,aes(x=X,y=Y3))+geom_line() 
    k<-plot_grid(A,B,C) 

    ggsave(k, filname = "path/finalplot.jpeg") 
} 

посмотреть на ?ggsave посмотреть на другие аргументы, чтобы указать, как height и width

+1

В этом коде есть некоторые проблемы ('jpeg' не соответствует «dev.off()», а «ggsave» - три раза по одному и тому же пути к файлу). –