制作全幻灯片大小的 ggplot2 输出 {Xaringan}

Making full-slide sized ggplot2 output {Xaringan}

有没有办法让 ggplot 图表包含 {xaringan} 演示文稿的所有幻灯片?如果我将其导出为 .png 并将其作为背景图片,我可以做到这一点。但是直接从块输出呢?

R-markdown本质上只是一种编写markdown文档(如html、pdf等)的方法。从本质上讲,这允许我们使用标准的 markdown、html 和 LaTeX 来解决这些类型的问题。

正如一辉的书rmarkdown-cookbook中所描述的那样,我们可以在放置图形时利用这一点。因此,一种方法是简单地保存图像,然后使用标准乳胶命令显示它

```{r image_save, include = FALSE}
library(ggplot2)
p <- ggplot(pressure, aes(x = temperature, y = pressure)) + geom_point()
ggsave('myimage.png', p, dpi = 300) #change dpi for better resolution. 300 is standard
```

\begin{figure}[!p]
  \includegraphics{myimage.png}
  \caption{some latex caption, because someone may prefer this}
  \label{reference_label:1}
\end{figure}

严格来说,这并不能保证情节在它自己的页面上,因为其他图像可能包含在同一页面上.对于更严格的裁决,可以在 header 中包含一个文件以包含不同的包或覆盖用于图形放置的底层代码,例如 this question.
的答案中所建议的 易辉也在同书解释how one can add code to the header

output:
  pdf_document:
    includes:
      in_header: "preamble.tex"

例如,序言可以只包含

% Contents of preamble.tex
\makeatletter
\@fpsep\textheight
\makeatother

这是链接线程中的第一个建议答案。请注意,如果其中包含 latex 包,markdown 编译器可能无法识别这一点,并且 latex 可能需要按照 Yihui 在 chapter 6.11.

中的描述写入 latex 块中

我确信仅使用 knitr::opts_chunk$set(fig.pos = '!p') 就可以获得类似的结果,但这似乎并没有给出预期的结果。我也确信可以使用 html 做类似的事情,但我不是 html 专家。

最小的可重现示例

---
title: "Untitled"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

# Including Plots
Some more text
```{R, include = FALSE}
library(ggplot2)
p <- ggplot(pressure, aes(x = temperature, y = pressure)) + geom_point()
ggsave('myimage.png', p)
```

\begin{figure}[!p]
  \includegraphics{myimage.png}
  \caption{some latex caption, because someone may prefer this}
  \label{reference_label:1} %Label which could be referenced somewhere else in the document.
\end{figure}
text after latex figure
# Random text following the graphis
Here you can place even more information! It is still the same page!

底部是一个最小的例子。

解释: xaringan 的默认 CSS 样式在顶部和底部有 16 像素的填充,在顶部和底部有 64 像素的填充双方。您可以通过创建一个 CSS 文件来覆盖它(例如 my_css.css 包含以下行:

.remark-slide-content.full-slide-fig{
  padding: 0px 0px 0px 0px;
  width: 100%;}

然后在 YAML 中引用 CSS 文件。请务必指定幻灯片比例和 fig.asp() 块选项相同(例如,宽屏输出为 16 x 9)。显然我仍然缺少另一个 xaringan 默认 CSS 包含填充,因为如果你使用彩色背景,幻灯片顶部仍然会有一小块背景......但是您可以通过将背景颜色设置为白色或透明并使用 out.width="95%" 作为块选项来避免这种情况。

最后,请务必指定给定的幻灯片使用 class full-slide-fig

---
title: "Full-slide figures with **xaringan**"
date: "`r Sys.Date()`"
output: 
  xaringan::moon_reader:
    css: "my_css.css"
    nature:
      ratio: "16:9"
---

class: full-slide-fig

```{r setup, include = FALSE}
knitr::opts_chunk$set(
  fig.asp = 9/16,
  fig.align = 'center',
  echo = F,
  out.width = "95%",
  dpi= 300
)
library(ggplot2)
```

```{r}
ggplot(data = mtcars, mapping = aes(disp, mpg))+
  geom_point()
```

---