私はggplot
グラフィックスのリストを作成して、1つのイメージにまとめて印刷したいと思っています。私のコードには、2つのループがあります。外部ループは、1つの変数に基づいてデータを細分化します。内側のループは、データをさらに細分化し、細分ごとに散布図を作成します。プロットはリストに保存されます。内側のループが完了すると、grid.arrangeオブジェクトは、次のようにリストオブジェクトを使用して作成されR - ggplotオブジェクトのリストを、grid.arrangeが受け入れるgrobsのリストに変更しますか?
require(ggplot2)
require(grid)
require(gridExtra)
PRIMARY LOOP STRUCTURE {
...
my_plots = list()
for (j in c(1:length(my_nodes))){
cur_node = my_nodes[j]
node_dat = temp_dat[temp_dat$Node == cur_node,]
p = my_scatter(node_dat, "PRE", "POST") + geom_point(aes(color = Node, shape = Recurrence_Type, size = 2))
my_plots[[j]] = p
}
grid.arrange(my_plots[[1]],my_plots[[2]],my_plots[[3]],my_plots[[4]],my_plots[[5]], nrow = 4, ncol = 3)
}
問題:(注:このコードは、この質問の下部に共有されているカスタム関数、my_scatter
が含まれます)ループのいくつかの反復では、my_plots
は異なる数の要素を持ちます。私は条件文のシリーズで、この問題を解決できることを知っている:
if (length(my_plots) == 2) {
grid.arrange(my_plots[[1]],my_plots[[2]],nrow=1,ncol=2)
} elsif (length(my_plots == 3) {
grid.arrange(my_plots[[1]],my_plots[[2]],nrow=2,ncol=2)
} elsif...
しかし、これは面倒なようで、私はあまり尖っていない解決策を見つけることを期待しています。通常、この種のものにはfacet_grid()
を使用しますが、生成する2〜3つ以上のプロットがある場合、ファセット・グリッドが生成する超薄矩形に歪んだ場合、散布図を解釈することは困難です。
これはgrobs
とlapply
を使用して問題を解決しているようですが、これは私が過去に多くの成功を収めたことのないRプログラミングの2つの側面です。
どのようにすることができます私はどちらか:
- 変更受け入れるgrid.arrange grobsのリストにggplotオブジェクトの私のリスト?
- facet_grid(または同様の既存の関数)に、複数の行のプロットが正方形に近くなるようにしたいのですか?
ここで、最初のコードブロックで使用される機能my_scatter
です:
my_scatter = function (df,a,b) {
test1 = class(df)
if (! test1 == "data.frame") {
stop("1st Variable should be a data frame")
}
test2 = class(df[,a])
valid_classes = c("integer", "numeric")
if (! test2 %in% valid_classes) {
stop("2nd Variable should either be an integer or numeric")
}
test3 = class(df[,b])
if (! test3 %in% valid_classes) {
stop("3rd Variable should either have class numeric or integer")
}
p = ggplot(data = df, aes_string(a, b)) + xlim(0,1) + ylim(0,1) + geom_point() + geom_abline(slope = 1, intercept = 0, color = "white")
return(p)
}
をところで、あなたの第二設問のために、クラスをチェックするために 'facet_wrap' – baptiste
BTW2のnrow/NcoI部位の引数をチェックし、より簡潔な方法は、' stopifnot(継承(DF、「だろうdata.frame "))' – baptiste