如何在RMarkdown中用highcharter循环生成标签页式独立图表?
解决方法
问题的核心原因是:你在循环中先创建了所有标签页标题,最后才一次性输出所有图表,导致所有图表都被放到了最后一个标签页里。要让每个图表对应到各自的标签页,需要在创建每个标签页标题后,立即输出该标签页对应的图表。
以下是修正后的完整代码:
--- 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}
#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 for(i in unique(mydata$year)) { # 创建标签页标题 cat(sprintf("#### %s\n\n", i)) # 生成对应年份的图表 chart <- mychart(i) # 将图表转换为HTML并输出到当前标签页 cat(as.character(htmltools::tagList(chart))) # 添加换行分隔内容 cat("\n\n") }
关键修改点: - 移除了原代码中收集图表的`tagList()`对象`a` - 在循环内,每创建一个标签页标题后,立即生成对应图表并将其转换为HTML代码输出 - 使用`htmltools::tagList()`确保highcharter图表的HTML结构正确生成,再通过`as.character()`转换为可直接插入文档的字符串 这样每个图表会被直接插入到对应年份的标签页下方,解决了前两个标签页为空、图表全部集中在最后一个标签页的问题。 内容的提问来源于stack exchange,提问作者user23253940
相关产品推荐
相关产品推荐

