为 knitr 中循环创建的每个图表添加标题

Add a title for each chart created by a loop in knitr

如果您 运行 创建一个 HTML 文档,您会看到它为三种鸢尾属植物创建了一个单独的条形图。

为了在循环中创建的 HTML 文档中打印此绘图图表列表,您必须将图表存储在列表中,并且 运行 htmltools 在循环后行让它们正确显示;你不能只打印(图表)。

但是,我希望它在打印图表之前简单地打印物种名称。然后下一个相同,依此类推。这样您就可以知道每个图表代表哪个组。

我知道您可以使用 plot_ly 参数为循环中的每个图表添加一个标题。但是,我只是将这些条形图用作一个简单的示例;我的实际报告使用了另一个类似的包,它没有直接在图表中包含标题的选项,但在其他方面的工作方式相同。这就是为什么我想弄清楚如何简单地让它打印 "setosa",然后显示条形图,"versicolor",然后显示条形图等。我不知道该怎么做这使用 htmltools。

---
title: "Test"
output: html_document
---


```{r charts, echo=FALSE, message=FALSE}

library("plotly")

charts<-list()

for(i in 1:length(unique(iris$Species))){

    iris2<-iris[iris$Species==unique(iris$Species)[i],]

    charts[[i]]<-plot_ly(iris2, x = ~Sepal.Length, y = ~Sepal.Width, type = 'bar')
}

htmltools::tagList(charts)
```

这是我正在尝试做的一个例子(只显示这张图片中的第一组):

您可以创建另一个列表并在图表中附加文本。基本思想是以下代码块:

list(tags$h1(unique(iris$Species)[i]),
                        tags$figure(charts[[i]]))

您可以查看 ?taglisttag$... 的参数,以更好地理解这个想法的来源。请参阅下面的答案:

---
title: "Test"
output: html_document
---


```{r charts, echo=FALSE, message=FALSE}

library("plotly")
library("htmltools")

charts <- list()

for(i in 1:length(unique(iris$Species))){

    iris2 <- iris[iris$Species==unique(iris$Species)[i],]

    charts[[i]]<-plot_ly(iris2, x = ~Sepal.Length, y = ~Sepal.Width, type = 'bar')
}

tgls <- list()

for(i in 1:length(unique(iris$Species))){
  tgls[[i]] <- list(tags$h1(unique(iris$Species)[i]),
                    tags$figure(charts[[i]]))
  }


tagList(tgls)
```

我不确定为什么你不能使用 %>% layout(title="plot title")。您可能想分享您用于灌封的实际包以获得更直接的答案。为了完成,我 post 一个带有 plotly 个参数的解决方案。

---
title: "Test"
output: html_document
---


```{r charts, echo=FALSE, message=FALSE}

library("plotly")

charts<-list()

for(i in 1:length(unique(iris$Species))){

    iris2<-iris[iris$Species==unique(iris$Species)[i],]

    charts[[i]]<-plot_ly(iris2, x = ~Sepal.Length, y = ~Sepal.Width, type = 'bar') %>% 
                    layout(title=as.character(unique(iris$Species)[i]))
}

htmltools::tagList(charts)
```