Как отобразить список графиков chorddiag swhen с использованием динамически генерируемых вкладок? - PullRequest
0 голосов
/ 26 мая 2020

Я хочу динамически генерировать вкладки, и каждая вкладка отображает график corddiag график

library(igraph)
library(tidygraph)
library(chorddiag)

m <- matrix(c(11975,  5871, 8916, 2868,
               1951, 10048, 2060, 6171,
               8010, 16145, 8090, 8045,
               1013,   990,  940, 6907),
               byrow = TRUE,
               nrow = 4, ncol = 4)
groupnames <- c("black", "blonde", "brown", "red")
row.names(m) <- groupnames
colnames(m) <- groupnames

m - это просто какой-то график corddiag, который я использую для простоты. У меня разные графики на каждой странице на основе разных наборов данных. Поэтому на следующем этапе я создал список из corddiag графиков:

```{r, include=FALSE}
graphList_biling.lan <- list()  
for ( i in 1:3) {
 graphList_biling.lan[[i]] <- htmltools::tagList(chorddiag(m))
}
```

Я просто использовал один и тот же m в каждом l oop для простоты, но на моем фактическом графике они будут разными , поэтому мне нужно создать список. Затем я делаю следующее:

## First learned languages {.tabset .tabset-fade .tabset-pills}

```{r echo=FALSE, fig.height=6, fig.width=6, warning=FALSE, results='asis'}
for (i in 1:3) {
  cat("###", paste("Tab ",i), '{-}',  '\n\n')
  print(htmltools::tagList( graphList_biling.lan[[i]]))
  cat( '\n\n')
}
```

В окне Rmarkdown все работает очень хорошо, но когда я завязываю узел, я не могу создавать графики. Он создает пространство, но графики не отображаются

1 Ответ

1 голос
/ 26 мая 2020

Попробуйте это. Решение такое же, как и в случае с вашим предыдущим вопросом. (; Решающим шагом является добавление «фиктивного» графика вне l oop. Согласно этому сообщению этот фиктивный график необходим для обеспечения того, чтобы библиотеки (в данном случае d3) были включены в рендеринг HTML:

---
title: "test_tab_loop"
date: "26 5 2020"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```


```{r}
library(igraph)
library(tidygraph)
library(chorddiag)

m <- matrix(c(11975,  5871, 8916, 2868,
               1951, 10048, 2060, 6171,
               8010, 16145, 8090, 8045,
               1013,   990,  940, 6907),
               byrow = TRUE,
               nrow = 4, ncol = 4)
groupnames <- c("black", "blonde", "brown", "red")
row.names(m) <- groupnames
colnames(m) <- groupnames
```

## First learned languages {.tabset .tabset-fade .tabset-pills} 

```{r, include=FALSE}
## init step: takes care that the libs are included
htmltools::tagList(chorddiag(m))
```

```{r, include=FALSE}
graphList_biling.lan <- list()  
for (i in 1:3) {
  graphList_biling.lan[[i]] <- htmltools::tagList(chorddiag(m))
}
```

## First learned languages {.tabset .tabset-fade .tabset-pills}

```{r echo=FALSE, fig.height=6, fig.width=6, warning=FALSE, results='asis'}
for (i in 1:3) {
  cat("###", paste("Tab ",i), '{-}',  '\n\n')
  ## You already applied htmltools::taglist. So just print
  print(graphList_biling.lan[[i]])
  cat( '\n\n')
}
```
...