2017-04-26 7 views
0

Im複数のプロットを1つの図に並べるにはmultiplot関数(http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/)を使用しようとしています。 http://rstudio-pubs-static.s3.amazonaws.com/2852_379274d7c5734f979e106dcf019ec46c.htmlから取った次の例では、正常に動作します:ggplotとmultiplotは常に同じ内容を表示します

plots <- list() # new empty list 
for (i in 1:6) { 
    p1 = qplot(1:10, rnorm(10), main = i) 
    plots[[i]] <- p1 # add each plot into plot list 
} 
multiplot(plotlist = plots, cols = 3) 

しかし、私のコードはありません:

dataset <- data.frame(x=c(1,2,3,4,5,6), y1=c(1,4,6,8,10,12), y2=rnorm(6)) 
plots <- list() 
for (i in 1:2){ 
    plots[[i]] <- ggplot(dataset) + geom_point(aes(x=dataset[,1], y=dataset[,i+1])) 
} 

multiplot(plotlist = plots, cols=2) 

はどういうわけか、それがために、プロットオブジェクトがリストに割り当てられているかに関係しています私がするとき

a <- ggplot(dataset) + geom_point(aes(x=dataset[1], y=dataset[2])) 
b <- ggplot(dataset) + geom_point(aes(x=dataset[1], y=dataset[3])) 
multiplot(a,b) 

すべてが期待どおりに動作します。またmultiplot(plotlist=list(a,b))も問題なく動作します。

私は、その相違点を認識できません。誰も助けることができますか?

多くのおかげで、

Enno

答えて

0

それは私が考えるAESにデータセットを設定するとしています。私は通常、変数を直接呼び出して動作するようにしています。

plots <- list() 
for (i in 1:2){ 
    p1 <- ggplot(dataset,aes_string(x=names(dataset)[1], y=names(dataset)[i+1])) + geom_point() 
    plots[[i]] <- p1 
} 

multiplot(plotlist = plots, cols=2) 
+0

ありがとう、それはトリックをやったようでした!私は問題の根本的な原因を理解していませんが。 – mcenno

+0

説明は@ Janna Maasが理にかなっているようです! – timfaber

1

huh。魅力的な

それはプロットが実際に作成されるまでggplotコール内部iが評価されないことが判明:

plots <- list() 
i <- 1 
plots[[i]] <- ggplot(dataset) + geom_point(aes(x=dataset[,1], y=dataset[,i+1])) 

は、Y1とのあなたのプロットを描画します:

plots[[1]] 

変更i

i <- 2 

あなたのリストは突然あなたのploをレンダリングしますyとのt:

plots[[1]] 
関連する問題