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

Quarto循环绘图中标签失效与自动标题生成问题

Quarto 问题解答

1. 标签fig-test无法识别的原因及修复

你用循环生成了两张图,但代码块的元配置不符合Quarto多图交叉引用的规则,导致标签失效:

  • 误用fig-cap存放子图标题:Quarto里fig-cap是整个图组的主标题,每个子图的标题要放在fig-subcap字段(值为列表)。
  • 未明确多图布局:生成多个图时,需要指定layout-ncol这类布局参数,告诉Quarto这是一个整体图组,不是独立的两张图。

修正后的代码块配置如下:

#| label: fig-test
#| fig-cap: "测试图组"
#| fig-subcap: 
#|   - "第一张图的标题"
#|   - "第二张图的标题"
#| layout-ncol: 2
#| lightbox: 
#|   group: test_group

for (i in 1:2)
    plot(rnorm(100), pch = 19, cex = 0.5)

修改后@fig-test就能正常识别并指向该图组。

2. YAML中自动生成图表标题的方法及更新情况

YAML本身不支持原生循环,但Quarto允许在YAML或代码块配置中用R表达式动态生成内容,相比你之前查到的方案,现在的支持有这些增强:

核心实现方式

用!expr前缀在配置中执行R代码,结合glue这类工具包可以批量生成标题:

  • 代码块内动态生成子标题:
    #| label: fig-dynamic
    #| fig-cap: "动态标题图组"
    #| fig-subcap: !expr glue::glue("子图 {1:2}: 随机正态分布")
    #| layout-ncol: 2
    
    for (i in 1:2)
        plot(rnorm(100), pch = 19, cex = 0.5)
    
  • YAML全局配置中动态生成通用规则:
    ---
    title: "MWE"
    params:
      plot_count: 2
    format:
      html:
        fig-cap-prefix: !expr paste("图", seq_len(params$plot_count), sep = "-")
    ---
    

后续更新的优化点

  1. 动态表达式支持范围扩大:现在几乎所有YAML字段和代码块元参数都能使用!expr。
  2. 与Quarto工具链深度集成:可以调用quarto包的函数获取文档上下文,实现更复杂的动态配置。
  3. 第三方工具包无缝兼容:无需额外配置就能在!expr里调用glue、stringr等包的函数,简化批量标题生成逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:44:53