2012-05-22 14 views
42
library(ggplot2) 
df <- data.frame(x=1:10, y=rnorm(10)) 
p1 <- ggplot(df, aes(x,y)) + geom_point() 
plist <- list(p1,p1,p1,p1,p1) 
# In my real example,a plot function will fit a ggplot to a list of datasets 
#and return a list of ggplots like the example above. 

grid.arrange()gridExtraに使用してプロットを配置したいと考えています。grid.arrangeを使用してプロットの変数リストを配置するにはどうすればよいですか?

plistのプロット数が可変であれば、どうすればよいですか? grid.arrange(plist[[1]],plist[[2]],plist[[3]],plist[[4]],plist[[5]])

が、私はより一般的な解決策が必要になります。

これは動作します。思考?

これについてどのように
+0

は '?grid.arrange'にあります – baptiste

答えて

64

library(gridExtra) 
n <- length(plist) 
nCol <- floor(sqrt(n)) 
do.call("grid.arrange", c(plist, ncol=nCol)) 

enter image description here

+0

関数がNULLオブジェクトを処理できないことを除いて、これは素晴らしいことです。 –

+0

Josh。わたしは、あなたを愛しています。これまで2時間かかりました。 'grid.arrange(plist [[1:length(plist)]]、ncol = nCol))'次のようなエラーが出ます: 'エラーhl.plots [[1 :12]]:レベル3でそのようなインデックスはありません。 'ありがとう! – Anto

+1

@Antoそのコードにはいくつかの問題があるようですが、表示されたエラーを与えるものはおそらく、ここに示したのと同じ種類のエラーによって引き起こされているでしょう: 'x < - list(1,2); x [[3:1]] 'となる。より広義には、 'plist [...]]ではなく' plist [...] 'のようなものを使用して、サブセット化を行います。そして、 'grid.arrange()'が最初の引数としてリストを取るように設定されていないので、 'do.call()'を使ってください。乾杯、そして最高の運! –

4

あなたは限り、あなたはそれぞれの機能にgrobs =引数を使用してリストを指定してリストをgrid.arrange()arrangeGrob()を使用することができます。例えば。完全を期すために

library(ggplot2) 
library(gridExtra) 
df <- data.frame(x=1:10, y=rnorm(10)) 
p1 <- ggplot(df, aes(x,y)) + geom_point() 
plist <- list(p1,p1,p1,p1,p1) 

grid.arrange(grobs = plist, ncol = 2) ## display plot 
ggsave(file = OutFileName, arrangeGrob(grobs = plist, ncol = 2)) ## save plot 
5

を(そしてこの古いとして、すでに質問has been revived, recentlyに答え)私はcowplotパッケージを使用してソリューションを追加したい:例では、あなたが与えた

cowplot::plot_grid(plotlist = plist, ncol = 2) 

enter image description here

+0

このコードを使用してプロットのリストを渡すのはなぜですか? 'ggplot_to_gtable(x)のエラー: 引数は" ggplot "または" gtable "クラスである必要があります –

+0

プロットはどのように生成されましたか? 'ggplot2'パッケージやベースグラフィックを使用していますか? – Uwe

+0

'ggplot2' 'grid.arrange'はほとんど私のために働いた - しかし、プロットの私のリストが人口になっていないことがわかります。私は質問として問題を投稿した:http://stackoverflow.com/questions/43216262/saving-multiple-ggplots-created-in-a-for-loop-to-a-single-plot。だから、私はそれがカウプロットの問題であったのだろうかと思っています –

関連する問題