Как добавить (многостраничный) PDF в rmarkdown? - PullRequest
0 голосов
/ 24 сентября 2018

Рассмотрим этот простой пример.

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

mydata <- data_frame(group = c('a', 'a', 'a', 'b', 'b', 'b'),
                     x = c(1,2,3,5,6,7),
                     y = c(3,5,6,4,3,2))

mydata2 <- mydata %>% group_by(group) %>% 
  nest() %>% 
  mutate(myplot = map(data, ~ggplot(data = .x, aes(x = x, y = x)) + geom_point()))

pdf("P://mychart.pdf")
print(mydata2$myplot)
dev.off()

Приведенный выше код выведет PDF-файл с двумя страницами.Как я могу показать эти две страницы в моем rmarkdown документе?

Использование

---
title: "crazy test"
output:
  pdf_document
---

```{r global_options, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, fig.pos = 'h')
```


ttt

## this is a test!!

```{r label, out.width = "85%", fig.cap = "caption"}
knitr::include_graphics(path = "P://mychart.pdf")
```

покажет только первую страницу pdf!Где находится другой график?: (

enter image description here

Есть идеи?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Можно использовать pdfpages для включения нескольких страниц из файла PDF одновременно.Тем не менее, они включены на отдельных страницах.Хотя можно добавлять номера страниц, вы не можете легко поместить эти изображения в среду figure.К счастью, \includegraphics имеет возможность использовать отдельные страницы из PDF.К сожалению, knitr::include_graphics не позволяет передавать дополнительные аргументы в \includegraphics.

Здесь обе возможности:

---
title: "crazy test"
output:
  pdf_document
header-includes:
  - \usepackage{pdfpages}
---

```{r global_options, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, fig.pos = 'h')
```


```{r, include=FALSE}
library(dplyr)
library(ggplot2)
library(tidyr)
library(purrr)

mydata <- data_frame(group = c('a', 'a', 'a', 'b', 'b', 'b'),
                     x = c(1,2,3,5,6,7),
                     y = c(3,5,6,4,3,2))

mydata2 <- mydata %>% group_by(group) %>% 
  nest() %>% 
  mutate(myplot = map(data, ~ggplot(data = .x, aes(x = x, y = x)) + geom_point()))

pdf("mychart.pdf")
print(mydata2$myplot)
dev.off()
```


## this is a test!!

Only first page

```{r label, out.width = "85%", fig.cap = "caption"}
knitr::include_graphics(path = "mychart.pdf")
```

All pages but w/o caption and taking a full page

\includepdf[pages=-,nup=2,pagecommand={}]{mychart.pdf}

Alternative, using explicit LaTeX commands.

\begin{figure}
\includegraphics[page=1,width=0.5\linewidth]{mychart.pdf}
\includegraphics[page=2,width=0.5\linewidth]{mychart.pdf}
\caption{\label{fig:test} Test.}
\end{figure}

Можно также поместить их в блок R с помощью cat() и result = 'asis'.Однако параметры для настройки заголовка и т. Д. По-прежнему не используются.

0 голосов
/ 24 сентября 2018

Вот решение Rmd с помощью staplr.Обратите внимание, что вам нужно установить pdftk для работы split_pdf

---
title: "crazy test"
output:
  pdf_document
---

```{r global_options, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, fig.pos = 'h')
```

## Split pdf

```{r}
staplr::split_pdf("mychart.pdf", output_directory = ".", prefix = "mychart_")
```

## Add pdfs

```{r label, out.width = "85%", fig.cap = c("caption 1", "caption 2"), echo = FALSE}
flist <- list.files()
mychart_files <- flist[grep("mychart_", flist)]
knitr::include_graphics(mychart_files)
```

Кроме того, графические элементы не работают в цикле.Но он принимает несколько путей, так что это хорошо работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...