Подфигуры сложены вертикально с помощью knitr

Я пытаюсь поместить две подфигурки, сложенные вертикально, а не бок о бок, используя knitr в латексном документе. В Latex я обычно делаю это, помещая команду '\par' между двумя подплавающими точками, которые должны располагаться друг над другом, но я не знаю, как передать эту команду knitr.

Мне удалось найти только одну тему по этому вопросу: подфигуры или подзаголовки с помощью knitr?, Пример, приведенный Yihui, ставит цифры рядом. Окончательный ответ в этой теме достигает моей цели, но с использованием небольшого количества взлома, поэтому мне интересно, есть ли простой способ передать эту команду напрямую в knitr?

MWE:

\documentclass[a4paper]{article} 

\usepackage[font=footnotesize]{subfig}

\begin{document} 

<<GeneratePlot>>=
library(ggplot2)
library(tikzDevice)
P1 <- ggplot(data=mpg, aes(x=displ, y=hwy, colour=factor(cyl)))+
    geom_line()
P2 <-  ggplot(data=mpg, aes(x=displ, y=hwy, colour=factor(cyl)))+
    geom_point()
@


<<fig1,eval=TRUE,echo=FALSE,dev='tikz', fig.width=6, fig.height=3, out.width='1\\textwidth', fig.cap='Two figures', fig.subcap=c('Top','Bottom'), fig.show='asis', fig.pos='!htpb', fig.align='center', dependson='GeneratePlot'>>= 
P1
P2
@ 

\end{document}

Я также попытался создать объект заговора в том же блоке, что и выходной, но это дает тот же результат, и в моем исходном документе объекты заговора генерируются как часть большего блока, поэтому он будет иметь ту же структуру, что и MWE.,

2 ответа

Решение

Вы можете сделать это с помощью не-CRAN пакета oaReporting.

\documentclass[a4paper]{article} 
\usepackage{float}
\usepackage{subcaption}

\begin{document} 

<<setup, include=FALSE>>=
knitr::opts_chunk$set(fig.path="figures/")
library(oaReporting)
@

<<GeneratePlot>>=
library(ggplot2)
P1 <- ggplot(data=mpg, aes(x=displ, y=hwy, colour=factor(cyl)))+
    geom_line()
P2 <-  ggplot(data=mpg, aes(x=displ, y=hwy, colour=factor(cyl)))+
    geom_point()
path1 <- createPlot(P1, file="./figures/P1.pdf")
path2 <- createPlot(P2, file="./figures/P2.pdf")
captions <- c("P1", "P2")
@

<<results="asis", fig.keep="none">>=
insertFigures(paths = c(path1, path2), captions=captions,
              generalCaption = "P1 and P2",
              generalLabel = "fig:P1andP2",
              posMultipleFig = "H",
              nCol = 1, 
              width = 0.7)
@

\end{document}

Это официально поддерживается в knitr 1.17.19 (в настоящее время на Github). Добавить \par между двумя подфигурами вы можете использовать опцию чанка fig.sep = '\\par'например,

\documentclass[a4paper]{article}

\usepackage[font=footnotesize]{subfig}

\begin{document}

<<GeneratePlot>>=
library(ggplot2)
library(tikzDevice)
P1 <- ggplot(data=mpg, aes(x=displ, y=hwy, colour=factor(cyl)))+
    geom_line()
P2 <-  ggplot(data=mpg, aes(x=displ, y=hwy, colour=factor(cyl)))+
    geom_point()
@


<<fig1, echo=FALSE,dev='tikz', fig.width=6, fig.height=3, out.width='1\\textwidth', fig.cap='Two figures', fig.subcap=c('Top','Bottom'), fig.show='asis', fig.pos='!htpb', fig.sep='\\par'>>=
P1
P2
@

\end{document}

Выход:

вертикально сложенные подфигуры в knitr

Другие вопросы по тегам