我正在使用ggplot2创建一系列图。每个图都有一个程序化的名称,我想使用这些名称来为它们中的每一个添加标题。我希望从列表中提取名称并将其动态传递给fig.cap。
有没有办法做到这一点?以下是一个MCVE,您可以在列表和单独的图之间切换以查看图表是否消失或显示:
有没有办法做到这一点?以下是一个MCVE,您可以在列表和单独的图之间切换以查看图表是否消失或显示:
---
output: pdf_document
---
```{r, include = FALSE}
library(ggplot2)
library(knitr)
opts_chunk$set(echo=FALSE)
```
```{r}
## Plot 1
listOfPlots <- list(
# Plot 1
ggplot(data = diamonds) +
geom_point(aes(carat, price)),
## Plot 2
ggplot(data = diamonds) +
geom_point(aes(carat, depth))
)
names(listOfPlots) <- c("This is caption 1", "This is caption 2")
```
```{r, fig.cap = c("This is caption 1", "This is caption 2"), echo=TRUE}
listOfPlots
# listOfPlots$`This is caption 1`
# listOfPlots$`This is caption 2`
```
注意:
- Yihui 和其他人已经指出 (https://groups.google.com/forum/#!topic/knitr/MJVLiVyGCro),如果要在一个代码块中有多个图像并给它们添加标题,需要设置 echo=TRUE,因为使用内嵌图像和 pandoc 可能会产生问题。
- 我不想显示代码,并且图像的数量可能是可变的,所以我不想硬编码。有趣的是,即使设置了 echo=TRUE,使用 ggplots 的列表也无法正常工作,我必须单独调用每个 ggplot。
include=FALSE
参数来抑制任何输出。这意味着您不必将所有函数都包装在SupressStartupMessages()
中:https://yihui.name/knitr/options/#code-evaluation。希望这有所帮助 :) - Michael Harper