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

如何在R函数中同时返回HTML文本与ggplot图形?

解决方案

要让函数直接输出HTML文本和ggplot图形,同时不用在Quarto代码块加#| results: asis,可以按以下方式修改:

  • 用knitr::asis_output()包装HTML文本,让Quarto自动识别并渲染成HTML内容,无需手动添加asis指令
  • 在函数内部直接输出处理后的文本,再打印ggplot图形,不用返回列表后外部调用

修改后的完整代码:

#| echo: false
#| warning: false

library(fontawesome)
library(ggplot2)
library(dplyr)
library(glue)
library(knitr)

# 测试变量
text1 <- "Chart 1"
text2 <- "Chart 2"

icon_function <- function(choose_one){
  if (choose_one == "yes") {
    # 生成带图标和文本的HTML内容,用asis_output包装
    icon_text <- glue::glue(
      fontawesome::fa(name ='chart-line', fill = 'darkblue', prefer_type = 'solid'),
      "<span style='font-size:11pt; font-family: \"Arial\"'> ",
      text1, " + ", text2, "</span> ",
      fontawesome::fa(name ='chart-column', fill = 'grey', prefer_type = 'solid')
    )
    # 输出HTML内容
    cat(knitr::asis_output(icon_text))
    
    # 生成并打印ggplot图形
    p <- tibble(group = c('A','B'), amount = c(10,15)) |>
      ggplot() +
      geom_col(aes(x=group, y = amount)) +
      theme_minimal()
    print(p)
    
  } else {
    # 处理分支文本,同样用asis_output
    icon_text <- glue::glue(
      "Why didn't you choose 'yes'? ",
      fontawesome::fa(name ='thumbs-down', fill = 'red', prefer_type = 'solid')
    )
    cat(knitr::asis_output(icon_text))
  }
}

# 直接调用函数,自动输出文本和图形
icon_function("yes")

关键修改说明:

  1. 移除gt::html(),改用knitr::asis_output()包装HTML字符串,配合cat()输出,Quarto能自动渲染成正确的HTML格式,无需额外加results: asis
  2. 函数内部不再返回列表,而是直接输出文本和打印图形,调用函数即可完成所有输出
  3. 显式加载glue包(原代码使用了glue但未声明加载,补上避免报错)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:23:32