r - 循环遍历 ggplots 列表并使用 Knitr 为每个图提供一个图形标题

标签 r ggplot2 r-markdown knitr pandoc

我正在使用 创建一系列图ggplot2 .每一个都是以编程方式命名的,我想使用这些名称为每个人提供自己的图形标题。我想从列表中提取名称并将它们动态传递给 fig.cap。

有没有办法做到这一点?这是一个 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。
  • 最佳答案

    如果要给它们自己的标题,则 R Markdown 中的图之间需要有空格。正如 Yihui on your link 所述,这里的技巧是在两个图像之间添加一些换行符。

    ```{r, fig.cap=c("Caption 1", "Caption 2")} 
    listOfPlots[[1]]
    cat('\n\n') 
    listOfPlots[[2]]
    ``` 
    

    请注意, the double square brackets 仅用于返回绘图本身。

    使用循环

    假设您正在寻找一种更通用的方法,它可以适用于任何长度的列表,我们可以使用循环自动创建图之间的换行符。请注意,块头中需要 results="asis":
    ```{r, fig.cap=c("Caption 1", "Caption 2"), echo=FALSE, results="asis"} 
    
    for(plots in listOfPlots){
      print(plots)
      cat('\n\n') 
    }
    
    ``` 
    

    enter image description here

    作为最后的提示,您可能希望直接在标题中使用列表的名称。语法 {r, fig.cap = names(listOfPlots)} 将能够实现这一点。

    关于r - 循环遍历 ggplots 列表并使用 Knitr 为每个图提供一个图形标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52788015/

    相关文章:

    r - 在 rmarkdown ioslides 中包含 block 引用

    r - 将上标添加到使用 kable/kableExtra for Rmarkdown 格式化的表格的一个单元格

    r - 为什么 R [pls] 的 PLS 回归系数与其他 R 包的 PLS 回归系数不同?

    R ggplot2-帮助复制火车图

    r - 为什么在包含 Rmarkdown 文件时,Shiny 应用程序布局会发生变化?

    r - 用于可视化构建过程的调度程序图

    r - ggplot2垂直线未插入到所需位置

    R:滚动日期范围内的累积总和

    通过匹配其他列,将表的某一列中的某些记录替换为另一个表

    r - 如何在ggplot2中制作半月图