2017-05-15 19 views
1

この問題でこの数日間停滞しています。forループを使用してggplotsのグリッドを生成する

for(i in 1:10){ 
    nam <- paste("A", i, sep = "") 
    p <- ggplot(data=PCdf8, aes(x = 1:nrow(PCdf8), y = PCdf8[,i])) + 
    geom_line(colour = "#0072B2", size = 0.5) 
    assign(nam, p) 
} 

grid.arrange(A1, A2, A3, A4, A5, A6, A7, A9, A10) 

私のコードは、10回ではなく10種類のプロット(ちなみに、#10)同じプロットのグリッドを出してくれる。

空のリストに書き込もうとしましたが、non-grobsはgrid.arrange()と互換性がありません。私も非grobsを削除しようとしました。私は各プロットをオブジェクトA1〜A10に書き込むことにしました。私はまた、各ループの最後に "nam"を削除しようとしました...それにもかかわらず、このループは同じプロットのA1からA10までの10個のオブジェクトを生成します。つまり、ループ内の最後のプロットはすべてのオブジェクトに刺激的に書き込まれます。

これを約100点まで拡大したいと思います。無駄に)(私が(配列の異なる組み合わせを使用してみました

grid.arrange(A1:A100) 

)と貼り付けます。だから、私のような何かをしたいと思います。

ここでもオンラインで同様の質問がありましたが、実行可能な解決策を見つけることができませんでした。

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

+1

forループあなたは、インデックス付き左側を持って耳を傾ける使用。それ以外の場合は、各パスの間に値を上書きします。 –

+0

ggplotオブジェクトが 'x'のリストにある場合、' gridExtra :: grid.arrange(grobs = x) 'を使うことができます。 –

答えて

2

私は別のアプローチを提案します。データをワイドからロングまで整形し、ファセットを使用します。

library(dplyr) 
library(tidyr) 
library(ggplot2) 

# Example data frame 
df1 <- as.data.frame(matrix(rnorm(100), ncol = 10, nrow = 10)) 
df1 %>% 
    mutate(x = 1:nrow(df1)) %>% 
    gather(var, val, -x) %>% 
    ggplot(aes(x, val)) + geom_line() + facet_wrap(~var, ncol = 5) 

enter image description here

+0

これはうまく機能しました。本当にありがとう! –

関連する問題