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

问题描述 投票:1回答:1

如果运行以下命令创建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)
```

这是我要执行的操作的示例(仅在此图像中显示第一组):Knitr Title/Chart Example

r r-markdown plotly knitr
1个回答
1
投票

您可以制作另一个列表并将文本附加到绘图中。基本思想是以下代码块:

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")。您可能希望共享用于灌封的实际包装,以获得更直接的答案。为了完整起见,我还发布了一个带有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)
```
© www.soinside.com 2019 - 2024. All rights reserved.