30

新しい ggplot2 ユーザーとして、私は可能性の量に少し迷っており、単純な問題と考えるものに対する単純な答えをネット上で見つけるのに苦労しています。

ggplot2 の複数のプロットを同じシートに表示したいのですが、これらのプロットが for ループから来ていることを知っています。

次の例はコンパイルされません。説明のみを目的としています。

for(i in c(1:n)){                                   
  for(j in c(1:m)){
    ..........  # some data production
    p <- ggplot(df.all) + geom_bar(aes_string(x=class.names[i],fill=var.names[j])
}}

ここでは、p は上書きされますが、代わりに、生成されたすべての p を配置できる行列またはリストが必要です。次に、次のような単純な関数を使用します。

display_in_a_grid(list_of_ggplot_plots)

しかし、私が試した限りでは、プロットの行列のリストを作成することも、入力に引数を 1 つだけ取る関数を見つけることもできませんでした。

私が見たものについて:

パッケージ gridExtra の「arrangeGrob」は、 http ://code.google.com/p/gridextra/wiki/ のように各プロットに明示的な名前 (例: p1、p2、p3、...) が必要なため機能しません。アレンジグロブ

ggplot2 の「ファセット」メソッドは、私のデータセットの構成に適合していません (またはその逆:p)

これを管理する簡単な方法はありますか?

ありがとうございました、

フランソワ

4

2 に答える 2

56

私はリッチーに同意する傾向がありますが、自分でアレンジしたい場合は:

library(gridExtra)
library(ggplot2)
p <- list()
for(i in 1:4){
  p[[i]] <- qplot(1:10,10:1,main=i)
}
do.call(grid.arrange,p)

forの最後の例を見て?arrangeGrob、for ループを完全になくす方法を見てみましょう:

plots = lapply(1:5, function(.x) qplot(1:10,rnorm(10),main=paste("plot",.x)))
require(gridExtra)
do.call(grid.arrange,  plots)
于 2012-02-16T17:42:21.893 に答える
-1

これが私の解決策です。へのパラメーターを使用したggplot関数の小さな変更。mappingaes_string

library(gridExtra)
library(ggplot2)
p <- list()
for(i in 1:4){
p[[i]] <- ggplot(data=df,aes_string(x=df$x,y=df$y) +geom_bar(aes_string(x=class.names[i],fill=var.names[j])
}
do.call(grid.arrange,p)

お役に立てれば!

于 2018-08-21T10:08:03.563 に答える