fig.cap
рассчитан на один аргумент, и поэтому нам придется программно генерировать новые фрагменты кода для каждого из трех графиков, которые вы хотите. Как объяснил здесь , мы можем использовать функцию knit_expand
. Я исправил приведенный пример, включив в него подписи подфигуры и способ печати графиков из списка.
Я написал функцию splitSubFig
, которая будет ограничивать количество подфигур на график. Если мы перейдем по этому номеру, он создаст новую страницу. Обратите внимание, вам нужно будет использовать results="asis"
в заголовке чанка для создания фигур:
---
output:
pdf_document: default
header-includes:
- \usepackage{subfig}
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = F)
library(ggplot2)
library(knitr)
# Function to create a separate chunk to generate a plot for each item in list
splitSubFig <- function(plots, caption, maxlength) {
knitr::opts_knit$set(progress = FALSE, verbose = FALSE)
n <- length(plots)
numPages <- ceiling(n / maxlength)
splitPlots <- split(plots, rep(1:ceiling(n/maxlength), each=maxlength)[1:n])
for (page in 1:numPages) {
cat(
knit(text=knit_expand(
text=(
"```{r {{caption}}{{page}}, fig.cap='{{caption}}: {{page}}', fig.subcap=LETTERS[1:length(splitPlots[page])], out.width='8cm', fig.ncol=2, echo = FALSE, message = FALSE}
for(i in splitPlots[page]){
for(plots in i){
print(plots)
}
}
```"),
caption = caption,
page = LETTERS[page])))
}
}
```
```{r, results="asis"}
plots <- list(ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10, fill = "red"),
ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10, fill = "blue"),
ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10),
ggplot(data.frame(a = runif(50)), aes(x=a)) + geom_histogram(bins=10))
splitSubFig(plots, caption = "Your Caption", maxlength = 6)
```
Эта функция, безусловно, может быть улучшена, но она должна быть полезна для всего, что вам нужно!