web-dev-qa-db-ja.com

複数のページにプロットする

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ループで最終行のプロットが完了するのを待つ方法はありますか?

25
Mike Dewar

問題は、forループ内のデバイスに実際に出力するために最後の行(p + ...)の周りにprint()が必要なことだと思います。 。 。

31
Elaine

丁度。 ggplot2ブックの39ページには、ggplot2オブジェクトを作成するときに、「print()を使用して画面にレンダリングできます。これはインタラクティブに実行すると自動的に行われますが、ループまたは関数内では、print()が必要になると記載されています。それはあなた自身です」。

5
Paul Lemmens