【发布时间】:2018-12-06 20:26:01
【问题描述】:
我正在使用 R Markdown 输出到 pdf,并且我正在尝试使表格和绘图水平并排对齐。我可以让fig.align = "right" 将绘图与页面右侧对齐,但它绘制在表格下方(使用kable 格式化),而不是与它并排。有什么建议吗?
【问题讨论】:
标签: r-markdown
我正在使用 R Markdown 输出到 pdf,并且我正在尝试使表格和绘图水平并排对齐。我可以让fig.align = "right" 将绘图与页面右侧对齐,但它绘制在表格下方(使用kable 格式化),而不是与它并排。有什么建议吗?
【问题讨论】:
标签: r-markdown
这是使用TeX包floatrow的一种方式:
---
title: "Untitled"
header-includes:
- \usepackage{floatrow}
output:
pdf_document:
keep_tex: true
---
\newfloatcommand{btabbox}{table}
\begin{figure}[H]
\begin{floatrow}
\ffigbox{%
```{r, fig.align = "right", echo = F}
plot(mpg ~ hp, data = mtcars)
```
}{\caption{A figure}}
\btabbox{%
```{r, fig.align = "right", echo = F}
knitr::kable(head(mtcars[,1:3]), format = "latex")
```
}{\caption{A table}}
\end{floatrow}
\end{figure}
【讨论】:
我更喜欢 Martin 的方法,但如果您想要一个较少依赖 LaTeX 的解决方案,您可以将表格转换为网格图形和plot it as a subfigure:
---
header-includes:
- \usepackage{subfig}
output: pdf_document
---
```{r, fig.cap='two plots', fig.subcap= c('A figure', 'A table'), out.width = '.49\\linewidth', echo = F, fig.align='center'}
library(gridExtra)
library(grid)
plot(mpg ~ hp, data = mtcars)
grid.newpage()
grid.table(head(mtcars[,1:6]), theme = ttheme_minimal())
```
【讨论】:
我可以通过 multicol 包和 minipages 的组合来做到这一点。只是另一种选择...
代码如下:
---
title: "Untitled"
header-includes:
- \usepackage{multicol}
- \newcommand{\btwocol}{\begin{multicols}{2}}
- \newcommand{\etwocol}{\end{multicols}}
output:
pdf_document:
keep_tex: true
---
```{r minipage_funs, echo = FALSE}
## adding minipages in Rmarkdown only seems to work for me when returned from function
fig_table_mp_start <- function() {
return("\\begin{minipage}{\\textwidth}")
}
fig_table_mp_end <- function() {
return("\\end{minipage}")
}
```
`r fig_table_mp_start()`
\btwocol
```{r, fig.align = "right", echo = FALSE}
plot(mpg ~ hp, data = mtcars)
```
```{r, fig.align = "right", echo = FALSE}
knitr::kable(head(mtcars[,1:3]), format = "latex")
```
\etwocol
`r fig_table_mp_end()`
我假设您可以使用填充来使其看起来更漂亮。
【讨论】: