Ggplotfacet_wrap
プロットを複数のページにプロットする関数を作成しようとしています。この機能はggplot2機能のやることリストに載っているように見えるので、これは単なるハックです。必要なページ数、ページごとに必要なdata.frame
の行数などを見つけるために、いくつかの小さな計算を行います。これはすべて機能すると確信しています。
pdf(filename)
for (i in seq(num_pages)){
slice = seq(((i-1)*num_rows)+1,(i*num_rows))
slice = slice[!(slice > nrow(df.merged))]
df.segment=df.merged[slice,]
p <- ggplot(df.segment, aes(y=mean,x=phenotype))
p <- p + geom_bar(stat="identity",fill="white",colour="black")
p + facet_wrap("ID",scales="free_y",ncol=n_facets,nrow=n_facets)
}
dev.off()
私の問題は、pdf()
関数とdev.off()
関数の間で、このようにすべてをforループにまとめると、forループがggplotを待機していないように見えることです。そのことを実行し、ループを非常にすばやく通過し、無効なPDFを出力します。
i = 1
を設定した場合は、pdf()
を開始し、forループ内で上記のコードを実行し、次にi=2
を設定してからコードを実行し、退屈するまで(i=3
)、デバイスの電源を切ります。 PDFは素晴らしいです。
次の反復に進む前に、forループで最終行のプロットが完了するのを待つ方法はありますか?
問題は、forループ内のデバイスに実際に出力するために最後の行(p + ...)の周りにprint()が必要なことだと思います。 。 。
丁度。 ggplot2ブックの39ページには、ggplot2オブジェクトを作成するときに、「print()を使用して画面にレンダリングできます。これはインタラクティブに実行すると自動的に行われますが、ループまたは関数内では、print()が必要になると記載されています。それはあなた自身です」。