如何在 r markdown 中将 kable 和 ggplot 排成一行(并排)?
how to align kable and ggplot in one row (side by side) in r markdown?
我正在尝试将 r markdown 文件编织成 pdf,但我无法将 ggplot 和 kable 对齐成一行。
我试过以下方法:
- cat("\twocolumn")
- kable_styling(位置="float_right")
下面是一个最小的、可重现的例子
---
title: "Untitled"
output: pdf_document
classoption: landscape
---
\newpage
```{r cars, echo=FALSE, fig.width=3, fig.height=3, results="asis", message=FALSE}
library(dplyr)
library(knitr)
library(kableExtra)
library(ggplot2)
dt <- split(mtcars, f = mtcars[, "cyl"]) %>% lapply(., function(x) x[1:5, 1:4])
for (i in seq_along(dt)) {
print(
kable(dt[[i]]) %>% kable_styling("striped") %>% add_header_above(c(" " = 1, "Group 1" = 2, "Group 2" = 2))
)
print(
ggplot(data = dt[[i]], aes(x = mpg, y = cyl, group = 1)) +
geom_line(aes(y = disp), linetype = "solid", colour = "#000000")
)
cat("\pagebreak")
}
```
这里有可能使用 multicol
乳胶包和两个自定义乳胶命令来避免 multicol 乳胶代码在编织过程中被更改:
---
title: "Untitled"
header-includes:
- \usepackage{multicol}
- \newcommand{\btwocol}{\begin{multicols}{2}}
- \newcommand{\etwocol}{\end{multicols}}
output: pdf_document
classoption: landscape
---
\newpage
\btwocol
```{r cars, echo=FALSE, fig.width=3, fig.height=3, results="asis", message=FALSE}
library(dplyr)
library(knitr)
suppressWarnings(library(kableExtra))
library(ggplot2)
dt <- split(mtcars, f = mtcars[, "cyl"]) %>%
lapply(., function(x) x[1:5, 1:4])
for (i in seq_along(dt)) {
print(
kable(dt[[i]]) %>%
kable_styling("striped") %>%
add_header_above(c(" " = 1,
"Group 1" = 2,
"Group 2" = 2))
)
cat("\columnbreak")
print(
ggplot(data = dt[[i]], aes(x = mpg, y = cyl, group = 1)) +
geom_line(aes(y = disp), linetype = "solid", colour = "#000000")
)
cat("\pagebreak")
}
```
\etwocol
请注意,我不得不禁止来自 kableExtra 的警告,因为当我使用 R v3.6.0 时关于在 R v3.6.1 下构建的警告足以阻止第一页正确呈现。
这会产生:
我正在尝试将 r markdown 文件编织成 pdf,但我无法将 ggplot 和 kable 对齐成一行。
我试过以下方法:
- cat("\twocolumn")
- kable_styling(位置="float_right")
下面是一个最小的、可重现的例子
---
title: "Untitled"
output: pdf_document
classoption: landscape
---
\newpage
```{r cars, echo=FALSE, fig.width=3, fig.height=3, results="asis", message=FALSE}
library(dplyr)
library(knitr)
library(kableExtra)
library(ggplot2)
dt <- split(mtcars, f = mtcars[, "cyl"]) %>% lapply(., function(x) x[1:5, 1:4])
for (i in seq_along(dt)) {
print(
kable(dt[[i]]) %>% kable_styling("striped") %>% add_header_above(c(" " = 1, "Group 1" = 2, "Group 2" = 2))
)
print(
ggplot(data = dt[[i]], aes(x = mpg, y = cyl, group = 1)) +
geom_line(aes(y = disp), linetype = "solid", colour = "#000000")
)
cat("\pagebreak")
}
```
这里有可能使用 multicol
乳胶包和两个自定义乳胶命令来避免 multicol 乳胶代码在编织过程中被更改:
---
title: "Untitled"
header-includes:
- \usepackage{multicol}
- \newcommand{\btwocol}{\begin{multicols}{2}}
- \newcommand{\etwocol}{\end{multicols}}
output: pdf_document
classoption: landscape
---
\newpage
\btwocol
```{r cars, echo=FALSE, fig.width=3, fig.height=3, results="asis", message=FALSE}
library(dplyr)
library(knitr)
suppressWarnings(library(kableExtra))
library(ggplot2)
dt <- split(mtcars, f = mtcars[, "cyl"]) %>%
lapply(., function(x) x[1:5, 1:4])
for (i in seq_along(dt)) {
print(
kable(dt[[i]]) %>%
kable_styling("striped") %>%
add_header_above(c(" " = 1,
"Group 1" = 2,
"Group 2" = 2))
)
cat("\columnbreak")
print(
ggplot(data = dt[[i]], aes(x = mpg, y = cyl, group = 1)) +
geom_line(aes(y = disp), linetype = "solid", colour = "#000000")
)
cat("\pagebreak")
}
```
\etwocol
请注意,我不得不禁止来自 kableExtra 的警告,因为当我使用 R v3.6.0 时关于在 R v3.6.1 下构建的警告足以阻止第一页正确呈现。
这会产生: