在Knitr或RMarkdown Beamer中使表格和图像并排显示

15

我正尝试在RMarkdown/Knitr中创建Beamer演示文稿幻灯片。在幻灯片中,我想将一个表格和一张图像并排放置,并在下方添加更多文字。当前,我的代码只能实现这个过程的一部分。我希望密度图能够放在Hmisc表格旁边。

我没有使用Kable或xtable,因为我通过Hmisc可以更好地控制表格。

此外,如何调整幻灯片中文本的特征(字体大小、类型、颜色)?

---
title: "BeamerTest1"
subtitle: Beamer Subtitle
author: "Author"

output:
  beamer_presentation:
    theme: CambridgeUS
    colortheme: "beaver"
    fonttheme: "structurebold"
---

## Slide with Table, Figure and Text

My topic for this slide 

\scalebox{0.35}{
```{r hmisc-table, echo=FALSE, message=FALSE, results='asis'}
library(Hmisc)
latex(head(mtcars), file='', table.env=FALSE, center='none')
```
}


```{r, echo=FALSE, fig.show='hold', fig.height=1, fig.width=2.5}
library(ggplot2)
mt <- ggplot(mtcars, aes(mpg)) + geom_density(alpha=.2, fill="#FF6666") +
  theme(axis.title.x = element_text(size=10),axis.text.x  = element_text(size=8),
        axis.title.y = element_text(size=10),axis.text.y  = element_text(size=8))
mt
```

- Here is some Bullet Text
- And some more
    - Subtext
    - More Subtext

谢谢

4个回答

22

作为回答类似问题的链接1链接2,我在我的回答中使用了:::符号,并添加了代码以创建您可能想要的输出。

您可以使用fenced_divs符号或:::符号来创建列或“两个内容布局”。有关符号的更多信息,请参见此页面

## Slide With Image Left

::: columns

:::: column
left
::::

:::: column
right

```{r your-chunk-name, echo=FALSE, fig.cap="your-caption-name"}
knitr::include_graphics("your/figure/path/to/the-image.pdf")

#The figure will appear on the right side of the slide...
```
::::

:::

自从实现了符号{{pandoc 2+}}的支持,需要安装RStudio v1.2+。 安装很容易(至少在我的情况下); 只需下载并安装RStudio v1.2+即可。 在安装过程中,您计算机上的旧版本RStudio将被替换为新版本而无需手动卸载它。
下面的图是一个例子,如果您实现了这个符号,就会有这样的效果。

enter image description here

以下是产生上述幻灯片的 MWE 代码:

---
title: "BeamerTest1"
subtitle: Beamer Subtitle
author: "Author"

output:
  beamer_presentation:
  theme: CambridgeUS
  colortheme: "beaver"
  fonttheme: "structurebold"
---

## Slide with Table, Figure and Text

::: columns

:::: column

My topic for this slide 

\scalebox{0.35}{
```{r hmisc-table, echo=FALSE, message=FALSE, results='asis'}
library(Hmisc)
latex(head(mtcars), file='', table.env=FALSE, center='none')
```
}


```{r, echo=FALSE, fig.show='hold', fig.height=1, fig.width=2.5}
library(ggplot2)
mt <- ggplot(mtcars, aes(mpg)) + geom_density(alpha=.2, fill="#FF6666") +
theme(axis.title.x = element_text(size=10),axis.text.x  = element_text(size=8),
axis.title.y = element_text(size=10),axis.text.y  = element_text(size=8))
mt
```

::::

:::: column

- Here is some Bullet Text
- And some more
    - Subtext
    - More Subtext

::::

:::

4
我不明白为什么这个答案没有更多的点赞。它是最通用的一个,而且非常简洁地解决了问题。 - Dr. Mike
1
这种方法确实非常整洁。根据此SO帖子所述,超过2列是可行的。有趣的是,列中内容的对齐方式从顶部对齐切换到居中对齐。 - mavericks
在Stack Overflow上提出了一个问题,关于如何调整这种方法以适应多列的垂直对齐。 - mavericks

4

在Beamer演示文稿中,存在 问题,即使用双列布局的问题。但是在同一篇文章中有解决方法:

简而言之:这个错误与pandoc转换引擎有关,该引擎将\begin{...}\end{...}之间的所有内容视为TeX代码。可以通过在YAML头文件中给begin{column}end{column}定义来避免这个问题。

创建mystyle.tex并在其中编写如下内容:

\def\begincols{\begin{columns}}
\def\begincol{\begin{column}}
\def\endcol{\end{column}}
\def\endcols{\end{columns}}

在Rmd文件中使用这些新的定义
---
output:
  beamer_presentation:
    includes:
      in_header: mystyle.tex
---


Two Column Layout 
-------

\begincols
  \begincol{.48\textwidth}

This slide has two columns.

  \endcol
\begincol{.48\textwidth}

```{r}
#No error here i can run any r code
plot(cars)
```

  \endcol
\endcols

然后你得到:

enter image description here


它可以工作,但是在你使用\begincols之后,你必须在其余的幻灯片中继续使用它(虽然你只需要一个列),你知道有什么解决方法吗? - Alejandro Andrade

1
考虑使用双列布局,就像您如果直接在Beamer中进行操作时所必须的一样。例如,请参见:
  • 这个问题讨论了如何使用RStudio提供的工具来完成此操作。(请注意,这是一个RStudio和RMarkdown包最近有很多进展的领域,该问题有点过时,但它确实暗示了现在可用的功能。)
  • 这个问题提供了使用内联LaTeX和Pandoc的解决方案。(这也将适用于RStudio,因为较新版本使用捆绑的pandoc作为Markdown引擎。)
  • pandoc邮件列表上的这篇文章讨论了如何在您的LaTeX块中包含Markdown,例如用于列的Beamer命令/环境。
  • TeX Stack Exchange上的这个问题可能会对您有所帮助,但您需要稍微调整一下以适应RMarkdown(该问题使用Sweave样式语法将R嵌入LaTeX与knitr中)。
您的问题的基本思路是在幻灯片的上半部分使用两列布局,下半部分使用一列布局。然后将各个R代码块放入其自己的列中。(如果两个图形的大小不同,您可能需要调整垂直间距。) Rpres格式对于给定幻灯片的列布局是全有或全无的(至少我上次检查时是这样),因此当您希望幻灯片的底部部分为单个“列”时,该解决方案并不理想。另一个解决方案是将两个图合并成一个,然后显示合并的图。我不确定您如何处理表格和图形,但对于两个图形,您可以使用gridExtra包将两个lattice或ggplot2(甚至是两者的混合)放置在单个网格中,从而在单个组合图中并排显示它们。

0

我认为你想要设置块选项fig.align=right,如此处所述。


谢谢Jthorpe,但这并没有解决问题。它确实将图形向右移动,但它仍然是在表格下面的一个级别,无论我调整图形或表格的大小。 - SGH
也许这个页面底部的答案可以帮到你:http://tex.stackexchange.com/questions/83361/two-column-layout-with-text-and-knitr-chunk - Jthorpe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接