如何在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")
关键修改说明:
- 移除
gt::html(),改用knitr::asis_output()包装HTML字符串,配合cat()输出,Quarto能自动渲染成正确的HTML格式,无需额外加results: asis - 函数内部不再返回列表,而是直接输出文本和打印图形,调用函数即可完成所有输出
- 显式加载
glue包(原代码使用了glue但未声明加载,补上避免报错)
内容的提问来源于stack exchange,提问作者seansteele
相关产品推荐
相关产品推荐

