使用结果=' asis'以编程方式将标题和绘图插入到具有R markdown的相同代码块中

时间:2017-05-03 05:55:54

标签: r plot ggplot2 knitr r-markdown

Rmarkdown中的results = 'asis'块选项允许用户轻松动态创建包含标题的文本。但是,我希望动态创建一个带有asis选项的标头,但是在相同的代码块中插入一些图形。

我能找到的最相关的答案是:Programmatically insert text, headers and lists with R markdown,但这个问题的答案不允许这些动态标头中的动态标头和绘图。

以下是一个简单的可重复示例,演示了results = 'asis'

我能做什么和不能做到的事情

下面的代码完成了我的预期,为每个物种创建一个标题。

---
output: html_document
---
```{r echo = FALSE, results ='asis'}
for(Species in levels(iris$Species)){
  cat('#', Species, '\n')
}
```

此处正下方的代码没有按照我的意愿行事。理想情况下,下面的代码会为每个Species生成一个标题,每个标题下面都有一个图。相反,它会在输出文件中生成单个setosa标头,后跟三个图。

---
output: html_document
---
```{r echo = FALSE, results ='asis'}
library(ggplot2)
for(Species in levels(iris$Species)){
  cat('#', Species, '\n')
  p <- ggplot(iris[iris$Species == Species,], aes(x = Sepal.Length, y = Sepal.Width)) +
    geom_point()
  print(p)
}
```

有没有办法动态生成3个标题,每个标题下有一个图?

1 个答案:

答案 0 :(得分:16)

您需要使用cat('\n')在图表之后和标题之前添加一些新行:

```{r echo = FALSE, results ='asis'}
library(ggplot2)
for(Species in levels(iris$Species)){
  cat('\n#', Species, '\n')
  p <- ggplot(iris[iris$Species == Species,], aes(x = Sepal.Length, y = Sepal.Width)) +
    geom_point()
  print(p)
  cat('\n')
}