2016-06-23 8 views
0

私はたくさんのプロットが生成されている関数を書いています。私はこれらのすべてのプロットを別々のpngファイルに保存したいと思いますが、png()でそれらを1つずつ実行したくない場合は、これを行う方法がわかりません。要するにリストに大量のggplotを集めてpngファイルを別々に保存しますか?

make_graphs <-function(MyData){ 
a <- ggplot(data = MyData, aes(y = Y1, x = X)) + geom_point() 
b <- ggplot(data = MyData, aes(y = Y2, x = X)) + geom_point() 
c <- ggplot(data = MyData, aes(y = Y3, x = X)) + geom_point() 
d <- ggplot(data = MyData, aes(y = Y4, x = X)) + geom_point() 

#...etc... 

x <- ggplot(data = MyData, aes(y = Y24, x = X)) + geom_point() 
y <- ggplot(data = MyData, aes(y = Y25, x = X)) + geom_point() 
Z <- ggplot(data = MyData, aes(y = Y26, x = X)) + geom_point() 

# Here I need some way to collect all the plots a-z and write them to files. 

} 

make_graphs(MyData) 

、私は:プロットの変数やその他の機能はそれほど規則的ではないものの

基本的に私のコードは、以下のものに似ています(私はforループ書かれているだろう)私がazに割り当てたプロットのリストを生成する方法を探して、そのリストを使ってpngとして保存することができます。私のプロット名はa-zよりも複雑で、プロットは関数に追加されます - 手動でリストに追加する必要はありません。

どうすればいいですか?

リストを持った後、私はthisような何かを行うことを計画します。

plotlist = mget(plots) 
pdf("all.pdf") 
invisible(lapply(plotlist, print)) 
dev.off() 

またはthis

lapply(names(plots), 
function(x)ggsave(filename=paste(x,".jpeg",sep=""), plot=plots[[x]])) 
+1

'myplots < - list();私がループでこれらのプロットを作成しない理由は分かりません。 – Roland

+0

わかりやすくするために、上のコードでプロットを単純化しました。しかし、彼らは実際にはすべて異なっています;回帰線の有無にかかわらず、異なるXとY、ボックスプロット、散布図、異なる美学など(あなたがおそらく推測したように、私はRの初心者です。しかし、私はそれを得ると思います!今すぐ試してみます) –

+0

それを作成するときにリストに入れておきます。そして 'for'ループを使用してください。' lapply'ループではありませんif – Roland

答えて

0

これは動作するはずです:

plotlist = lapply(1:26,function(i) 
    ggplot(data = MyData, aes_string(y = paste0('Y',i), x = 'X')) + geom_point() 

これはあなたのリストを与えました。今、あなたはあなたのファイルを保存するためにそれを使用することができます:

lapply(1:26, function(i) 
    ggsave(filename=paste0("your_path",i,".jpeg"), plot=plotlist[[x]])) 

編集aes_string()に関する下回っローランドによって示唆されているように。

+0

'eval(parse())'を使わないでください。Rの代わりにRでこれを行う正しい方法を学んでください。あなたは 'aes_string'を使うことができます。 – Roland

+0

ありがとう!私は@Ronaldの提案をコメントにフォローしました私のプロットとプロット名はサンプルコードの示唆よりも複雑ですが、いずれにしても答えが分かります!私はおそらくこれが非常に便利になるいくつかの追加のプロットを行う必要があります。 –

+0

@Renéeいいえ、決してこれをしないでください。このようなコードにバグがある場合は、ほとんど見つけることができません。 – Roland

関連する問題