我想使用 rmarkdown 和 highcharter 包打印在 for 循环中创建的单个图表作为选项卡式内容。
到目前为止,我只成功在一个选项卡中显示所有图形。
问题似乎是已知的(for循环中的离线图)。但是,我没有设法将建议的解决方案应用到我的代码中。
这是一个最小的例子:
---
title: "test"
output: html_document
---
```{r setup, include=FALSE}
#libraries
library(tidyverse)
library(highcharter)
library(htmltools)
#data
mydata <- data.frame(year = c("2018", "2018", "2019", "2020"),
license = c("CC BY", "CC BY-NC", "CC BY", "CC BY"),
cost = c(1000, 1500, 2000, 1000))
#functions
group_by_license <- function(x) {
x %>%
group_by(license) %>%
summarise(cost = sum(cost))
}
```
### license {.tabset .tabset-fade}
```{r mydata-license, results='asis', echo=F}
#data transformation
mydata_year <- split(mydata, mydata$year)
mydata_license <- lapply(mydata_year, group_by_license)
#chart
mychart <- function(i) {
hchart(mydata_license[[i]],"pie", hcaes(x = license, y = cost)) %>%
hc_title(text = paste0("My Data ", i))
}
#loop
a <- tagList()
for(i in unique(mydata$year)) {
cat("#### ", i, "\n \n")
a[[i]] <- mychart(i)
}
a
```
所有三个创建的图表都显示在最后一个选项卡中,而前两个选项卡为空:
我想在相应的选项卡中显示每个图(2018 年的图形在 2018 年选项卡等中)。
我还尝试了
print
,但没有成功,要么没有显示结果,要么没有显示图表的 HTML 代码,但没有图形:请参阅此处尝试的解决方案。
你是对的。问题和解决方案似乎与其他帖子中的相同,请参见例如我对 ggplotly
和
DT
从 Rmarkdown 中的
for
循环中的回答,但这是我第一次将其应用于
highcharter
:
要将图表放在单独的选项卡中,您必须在 for
for
print(htmltools::tagList( mychart(i) )
打印图表最后,为了完成这项工作,我们需要另一个步骤来确保所有必需的 JS 依赖项都添加到您的 Rmd 中,这可以通过调用 highchart()
include=FALSE
。
---
title: "test"
output: html_document
---
```{r setup, include=FALSE}
#libraries
library(tidyverse)
library(highcharter)
library(htmltools)
#data
mydata <- data.frame(year = c("2018", "2018", "2019", "2020"),
license = c("CC BY", "CC BY-NC", "CC BY", "CC BY"),
cost = c(1000, 1500, 2000, 1000))
#functions
group_by_license <- function(x) {
x %>%
group_by(license) %>%
summarise(cost = sum(cost))
}
```
```{r include=FALSE}
# Init Step to make sure that the dependencies are loaded
highchart()
```
### license {.tabset .tabset-fade}
```{r mydata-license, results='asis', echo=F}
mydata_year <- split(mydata, mydata$year)
mydata_license <- lapply(mydata_year, group_by_license)
mychart <- function(i) {
hchart(mydata_license[[i]],"pie", hcaes(x = license, y = cost)) %>%
hc_title(text = paste0("My Data ", i))
}
for(i in unique(mydata$year)) {
cat("#### ", i, "\n \n")
print(
htmltools::tagList( mychart(i) )
)
}
```