从循环中打印 RMarkdown 字幕
Print RMarkdown captions from a loop
我正在 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 上找到太多关于这个的信息。我确实找到了 ,但它看起来太复杂了,我想知道是否有我缺少的清晰简单的解决方案。
我想知道它是否与 eval.after
和 有关,但这不涉及循环内生成的情节。
非常感谢您的帮助!
看来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 = .))
)
```
如果这可能对某人有用。这是 Jonny 的字幕解决方案的改编版,无需打印列表索引。这可以通过使用 purrr::walk 而不是 purrr::map 来实现。还包括一个乳胶无花果标签和引用每个图的文本。
---
title: "Loop figures with captions"
output:
pdf_document
---
```{r loops, fig.cap=paste(sprintf("\label{%s}", names(mtcars)), "Graph of mpg vs.", names(mtcars)),results='asis', message=FALSE, echo=FALSE, warning=FALSE}
library(tidyverse)
library(stringi)
walk(names(mtcars),
~{
p <- ggplot(mtcars) +
geom_point(aes_string(x = 'mpg', y = .))
#print plot
cat('\n\n')
print(p)
#print text with refernce to plot
cat('\n\n')
cat(sprintf("Figure \ref{%s} is a Graph of mpg vs. %s. %s \n\n", ., .,
stri_rand_lipsum(1)))
cat("\clearpage")
})
```
我正在 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 上找到太多关于这个的信息。我确实找到了
我想知道它是否与 eval.after
和
非常感谢您的帮助!
看来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 = .))
)
```
如果这可能对某人有用。这是 Jonny 的字幕解决方案的改编版,无需打印列表索引。这可以通过使用 purrr::walk 而不是 purrr::map 来实现。还包括一个乳胶无花果标签和引用每个图的文本。
---
title: "Loop figures with captions"
output:
pdf_document
---
```{r loops, fig.cap=paste(sprintf("\label{%s}", names(mtcars)), "Graph of mpg vs.", names(mtcars)),results='asis', message=FALSE, echo=FALSE, warning=FALSE}
library(tidyverse)
library(stringi)
walk(names(mtcars),
~{
p <- ggplot(mtcars) +
geom_point(aes_string(x = 'mpg', y = .))
#print plot
cat('\n\n')
print(p)
#print text with refernce to plot
cat('\n\n')
cat(sprintf("Figure \ref{%s} is a Graph of mpg vs. %s. %s \n\n", ., .,
stri_rand_lipsum(1)))
cat("\clearpage")
})
```