web-dev-qa-db-ja.com

knitrとRMarkdownを使用して、チャンク内の複数のページに複数の図を追加するにはどうすればよいですか?

私はforループを使用して、knitrとrmarkdownを使用して1つのチャンクで複数のページにまたがる複数の大きな数字を作成しています。 Wordおよびhtml出力では正常に機能しますが、pdf出力には1つの問題があります。

これは私の問題を再現するための最小限のRMarkdownの例です。

---
title: "Knitr test"
date: "6 April 2015"
output: pdf_document
---


```{r, echo=FALSE, fig.width=6.5,fig.height=10}
library(ggplot2)
for (i in seq(1, 4)){
    p <- ggplot(cars, aes(speed, dist)) + geom_point() 
    print(p)
}
```

生成されたPDFファイルは次のようになります。このページには2つの図が印刷されています。

enter image description here

Fig.heightを変更し、rmdファイルにいくつかのセクションを追加すると、2つの図が同じページに異なる配置で印刷されます。

---
title: "Knitr test"
output: pdf_document
date: "6 April 2015"
---

## Section A

Row B

```{r plot_phenotype, echo = FALSE, fig.height=8, fig.width=6.5}
library(ggplot2)
for (i in seq(1, 4))
{
    p <- ggplot(cars, aes(speed, dist)) + geom_point()
    print(p)
}

```

enter image description here

この問題を修正するための提案をありがとう。

RStudio0.99.375を使用しています。これは私のセッション情報です。

sessionInfo()
R version 3.1.3 (2015-03-09)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252   
[3] LC_MONETARY=English_Australia.1252 LC_NUMERIC=C                      
[5] LC_TIME=English_Australia.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] rmarkdown_0.5.3.1 knitr_1.9.5      

loaded via a namespace (and not attached):
 [1] colorspace_1.2-5 digest_0.6.8     evaluate_0.5.5   formatR_1.0     
 [5] ggplot2_1.0.0    grid_3.1.3       gtable_0.1.2     htmltools_0.2.6 
 [9] MASS_7.3-34      munsell_0.4.2    plyr_1.8.1       proto_0.3-10    
[13] Rcpp_0.11.5      reshape2_1.4.1   scales_0.2.4     stringr_0.6.2   
[17] tcltk_3.1.3      tools_3.1.3      yaml_2.1.13     
11
Bangyou

私は自分の問題を解決しました。

生成されたtexファイルでは、各図の後に新しい行はありません。上記のrmdファイルを使用して生成したこのtexコード:

\includegraphics{test_files/figure-latex/plot_phenotype-1.pdf}
\includegraphics{test_files/figure-latex/plot_phenotype-2.pdf}
\includegraphics{test_files/figure-latex/plot_phenotype-3.pdf}
\includegraphics{test_files/figure-latex/plot_phenotype-4.pdf}

解決策は、各サイクルの後に新しい行を追加して図を印刷することです。

cat('\r\n\r\n')

ここに2つの「\ r\n」が必要な理由がわかりません。生成されたtexファイルは次のようになります。

\includegraphics{test_files/figure-latex/plot_phenotype-1.pdf}

\includegraphics{test_files/figure-latex/plot_phenotype-2.pdf}

\includegraphics{test_files/figure-latex/plot_phenotype-3.pdf}

\includegraphics{test_files/figure-latex/plot_phenotype-4.pdf}

これは私のRmdファイルの完全な例です

---
title: "Knitr test"
output:
  pdf_document:
    keep_tex: yes
date: "6 April 2015"
---

## Section A

Row B

```{r plot_phenotype, echo = FALSE, fig.height=8, fig.width=6.5}
library(ggplot2)
library(grid)
for (i in seq(1, 4))
{
    grid.newpage()
    p <- ggplot(cars, aes(speed, dist)) + geom_point()

    print(p)
    cat('\r\n\r\n')
}


```
14
Bangyou

編集1(LaTeX):新しいページに問題があるため、これをRMarkdownで機能させることができないようです。しかし、純粋なLaTeXを使用すると、1ページに複数のプロットがあり、最初にテキストがあるという問題が解決するようです。それがあなたが望むものであるかどうかはわかりませんが。 RStudioで、新しいR Sweave(.Rnw)ファイルを開き、次のことを試してください。

\documentclass{article}
\begin{document}
\title{A report}
\author{Me}
\maketitle
\section{One section}
Some text that does not say anything interesting.

<<r, echo=FALSE, fig.width=6.5, fig.height=7>>=
library(ggplot2)
for (i in seq(1, 4)){
  p <- ggplot(cars, aes(speed, dist)) + geom_point()
  print(p)
}
@

\end{document}

これにより、次のようになります。

just a pdf

編集2(RMarkdown)(回答に基づく):回答からコードを実行すると、テキストを含む最初のページが表示され、次にプロットごとに1ページが表示されます。これが必要な場合は、次を使用するだけで同じ結果を得ることができます(つまり、grid.newpage\rs、およびkeep_texを削除します)。

---
title: "Knitr test"
output: pdf_document
date: "6 April 2015"
---

## Section A

Row B

```{r plot_phenotype, echo = FALSE, fig.height=10, fig.width=6.5}
library(ggplot2)
for (i in seq(1, 4))
{
    p <- ggplot(cars, aes(speed, dist)) + geom_point()

    print(p)
    cat('\n\n')
}


```

これにより、次のようになります。

other screenshot

Fig.heightを7に変更すると、上記のLaTeXと同じ結果が得られます。

7
Peter Diakumis