【问题标题】:Print RMarkdown captions from a loop从循环中打印 RMarkdown 标题
【发布时间】:2017-03-04 04:31:15
【问题描述】:

我正在 RMarkdown 文档的循环中创建一系列绘图,然后将其编织成 PDF。我可以毫无问题地做到这一点,但我希望标题能够反映每个情节之间的变化。一个 MWE 如下所示:

---
title: "Caption loop"
output: pdf_document
---

```{r, echo=FALSE}
library(tidyverse)

p <- 
  map(names(mtcars), ~ggplot(mtcars) +
      geom_point(aes_string(x = 'mpg', y = .))) %>% 
  set_names(names(mtcars))
```

```{r loops, fig.cap=paste(for(i in seq_along(p)) print(names(p)[[i]])), echo=FALSE}
for(i in seq_along(p)) p[[i]] %>% print
```

我第一次尝试捕获绘图并将其存储在变量p 中,并尝试使用它来生成字幕,但这不起作用。尽管这肯定是许多人需要做的事情,但我在 SO 上没有找到太多关于此的内容。我确实找到了this question,但它看起来很复杂,以至于我想知道是否有一个清晰而简单的解决方案我缺少。

我想知道它是否与eval.afterthis question 有关,但这不涉及在循环中生成的绘图。

非常感谢您的帮助!

【问题讨论】:

  • 我可能没有正确理解这个问题,但问题可能只是情节没有标题。如果我们只想要标题中当前绘制的变量,我们可以在~ggplot 语句中添加+ ggtitle(.)
  • 为图添加标题使其可文本搜索。

标签: r ggplot2 knitr r-markdown tidyverse


【解决方案1】:

看来knitr 很聪明,可以自动完成任务。通过将names(mtcars) 添加到图形标题,knitr 依次迭代这些以生成正确的标题。现在唯一的问题是如何阻止所有列表索引在文档中打印...

---
title: "Caption loop"
output: pdf_document
---

```{r loops, fig.cap=paste("Graph of mpg vs.", names(mtcars)), message=FALSE, echo=FALSE, warning=FALSE}
library(tidyverse)

map(
  names(mtcars),
  ~ ggplot(mtcars) +
    geom_point(aes_string(x = 'mpg', y = .))
)
```

【讨论】:

  • “现在唯一的问题是如何阻止所有列表索引在文档中打印”是的!请帮忙!
猜你喜欢
  • 2020-05-28
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
  • 2012-12-12
  • 2020-03-15
相关资源
最近更新 更多