R:你如何以程序的方式将图表嵌入到RMarkdown的标签中?

时间:2017-04-26 13:48:50

标签: r ggplot2 r-markdown

我可以使用RMarkdown {.tabset}

来嵌入图表
#### Heading  {.tabset}
##### Subheading 1
```{r, echo=F}
df[[1]]    
```

这会在预览窗格中生成带有指定图形的单个选项卡(df是图表列表,调用df[[i]]生成图形)(在RStudio中内嵌所有图形)。

我可以使用for循环生成标签。

```{r, results='asis', echo = FALSE}
for (i in 1:length(gg0)) {
  cat("##### ",q$Subheading[i],"\n")
}
```

这会产生所需的输出 - 在子标题栏中带有名称的标签。

但是,我一直试图使用for循环自己生成图形,类似于我手动编码时的方式。

扩展上面的内容,我尝试生成产生初始输出的markdown,但是无法生成绘图(在内联降价和预览中)。

```{r, results='asis', echo = FALSE}
for (i in 1:length(gg0)) {
  cat("##### ",q$Subheading[i],"\n")
    cat('```{r, echo=F} \n')
    cat("gg0[[",i,"]]\n")
    cat('``` \n')
}
```

也许我错过了关于降价的更好的观点?我使用cat(甚至没有)

尝试了各种模式

我更喜欢RMarkdown解决方案,但其他解决方案同样受欢迎。

2 个答案:

答案 0 :(得分:5)

我玩了一下,找到了解决方案。您必须在beforeRender代码块中使用print ...

asis

作为解释,```{r} library(ggplot2) gg0 <- list() gg0[[1]] <- ggplot(mtcars, aes(mpg, hp)) + geom_point() gg0[[2]] <- ggplot(mtcars, aes(mpg, disp)) + geom_point() gg0[[3]] <- ggplot(mtcars, aes(mpg, drat)) + geom_point() headings <- c('hp','disp','drat') ``` #### Heading {.tabset} ```{r, results='asis', echo = FALSE} for (i in 1:length(gg0)) { cat("##### ",headings[i],"\n") print(gg0[[i]]) cat('\n\n') } ``` 命令与cat一起生成较低级别标题的降价代码,然后打印ggplot图。由于我们在父标题中使用了`{.tabset},因此它会在不同的标签中创建绘图。

答案 1 :(得分:1)

在for循环中添加plot.new()和dev.off()可以解决在最后一个选项卡中添加所有图形的问题。请参阅完整的解决方案here