You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarto动态标签页中echarts4r图表无法渲染问题求助

Quarto动态标签页中echarts4r图表无法显示的解决方案

问题根源

echarts4r生成的是HTMLwidgets交互式对象,和ggplot这类静态图形逻辑不同:静态图能直接被Quarto渲染,但HTMLwidgets需要被正确解析成可执行的HTML代码。之前用cat()输出的方式会把echarts的HTML代码当成纯文本输出,自然无法渲染出交互图表。

解决方案

方案1:用htmltools构建标签页结构

放弃cat()拼接HTML的方式,改用htmltools包直接构建标签页DOM结构,把echarts4r对象直接嵌入其中,Quarto会自动处理HTMLwidgets的解析:

library(echarts4r)
library(htmltools)

# 封装生成echarts图表的函数
make_echart <- function(data) {
  data |> 
    e_charts(mpg) |> 
    e_bar(disp)
}

# 动态生成标签页
tags$div(
  class = "tabset",
  lapply(unique(mtcars$cyl), function(cyl) {
    subset_data <- mtcars[mtcars$cyl == cyl, ]
    tags$div(
      class = "tab-panel",
      tags$h3(paste("气缸数:", cyl)),
      make_echart(subset_data)
    )
  })
)

把这段代码放在Quarto的R代码块中即可,无需额外设置results='asis'。

方案2:用asis引擎配合renderTags转HTML字符串

如果一定要用动态文本生成标签页,先把echarts4r对象转为可解析的HTML字符串,再通过asis输出:

library(echarts4r)
library(htmltools)

# 开始标签块
cat("::: {.tabset}\n")

# 循环生成每个标签页
for (cyl in unique(mtcars$cyl)) {
  subset_data <- mtcars[mtcars$cyl == cyl, ]
  # 生成图表并转为HTML字符串
  chart <- subset_data |> e_charts(mpg) |> e_bar(disp)
  chart_html <- renderTags(chart)$html
  
  # 输出标签标题和图表HTML
  cat(paste0("### 气缸数:", cyl, "\n"))
  cat(chart_html, "\n")
}

# 结束标签块
cat(":::\n")

注意这段代码要放在{r, results='asis'}的代码块中,让Quarto直接解析生成的HTML内容。

方案3:Shiny下载处理器中的处理

在Shiny里用Quarto渲染报告时,要确保模板qmd中使用上述两种方案之一,同时在Shiny环境中加载所需依赖包:

library(shiny)
library(echarts4r)
library(htmltools)
library(quarto)

ui <- fluidPage(
  downloadButton("download_report", "下载报告")
)

server <- function(input, output) {
  output$download_report <- downloadHandler(
    filename = function() {
      paste("echarts报告-", Sys.Date(), ".html", sep = "")
    },
    content = function(file) {
      # 复制模板qmd到临时文件
      temp_qmd <- tempfile(fileext = ".qmd")
      file.copy("report_template.qmd", temp_qmd, overwrite = TRUE)
      
      # 渲染报告
      quarto_render(temp_qmd, output_file = file)
    }
  )
}

shinyApp(ui, server)

模板qmd里按照方案1或2的方式嵌入echarts图表即可。

内容的提问来源于stack exchange,提问作者Ben_Kimpton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:57:34