具有多个图的动态选项卡r减价

时间:2018-11-23 09:55:18

标签: r r-markdown knitr

我设法创建了一个html文档,该文档基于项目列表创建了动态选项卡集。在一个选项卡上添加一个绘图可以正常工作。现在如何在一个选项卡上添加多个图?

这里是我开始的代码,但是当您将文档编织到html输出时,每个选项卡仅显示1个图。显然仍然缺少一些东西。

---
title: "R Notebook"
output:
  html_document:
    df_print: paged
editor_options:
  chunk_output_type: inline
---


### header 1
```{r}
library(ggplot2)
df <- mtcars

pl_list <- list()

pl1 <- qplot(cyl, disp, data = df[1:12,])
pl2 <- qplot(mpg, cyl, data = df[13:20,])
pl3 <- qplot(mpg, cyl, data = df[21:30,])
pl4 <- qplot(mpg, cyl, data = df[1:12,])

pl_list[[1]] <- list(pl1, pl3,  "one")
pl_list[[2]] <- list(pl2, pl4,  "two")
```


### header {.tabset}
```{r, results = 'asis', echo = FALSE}

for (i in seq_along(pl_list)){
  tmp <- pl_list[[i]]
  cat("####", tmp[[3]], " \n")
  print(tmp[1])
  cat(" \n\n")
  }
```

1 个答案:

答案 0 :(得分:1)

您可以做一些改进。

  1. 使用文本和级别的参数创建cat头函数。

有了它,您无需多次呼叫cat,它会自动创建所需数量的#

catHeader <- function(text = "", level = 3) {
    cat(paste0("\n\n", 
               paste(rep("#", level), collapse = ""), 
               " ", text, "\n"))
}
  1. print使用lapply的图。

完整代码如下:

---
title: "R Notebook"
output:
  html_document:
    df_print: paged
editor_options:
  chunk_output_type: inline
---


```{r, functions}
catHeader <- function(text = "", level = 3) {
    cat(paste0("\n\n", 
               paste(rep("#", level), collapse = ""), 
               " ", text, "\n"))
}
```

### header 1

```{r}
library(ggplot2)
df <- mtcars

pl_list <- list()

pl1 <- qplot(cyl, disp, data = df[1:12,])
pl2 <- qplot(mpg, cyl, data = df[13:20,])
pl3 <- qplot(mpg, cyl, data = df[21:30,])
pl4 <- qplot(mpg, cyl, data = df[1:12,])

pl_list[[1]] <- list(pl1, pl3,  "one")
pl_list[[2]] <- list(pl2, pl4,  "two")
```


## header {.tabset}

```{r, results = "asis", echo = FALSE}

for(i in seq_along(pl_list)){
    tmp <- pl_list[[i]]
    # As you want to use tabset level here has to be lower than 
    # parent level (ie, parent is 2, so here you have to use 3)
    catHeader(tmp[[3]], 3)
    lapply(tmp[1:2], print)
}
```