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

如何在ggplot的textbox文本框中使用LaTeX表达式

问题解决方法

错误原因

  • geom_textbox 来自ggtext包,仅支持字符串格式的markdown/html内容,不识别parse、TeX返回的R表达式对象
  • 在aes()中直接传入计算生成的表达式不符合ggplot2的映射规则,aes()仅用于映射数据框中的列

方案1:使用geom_textbox原生支持的markdown LaTeX语法(推荐,适合复杂LaTeX场景)

ggtext包的文本类geom原生支持包裹在$中的LaTeX语法,无需额外调用latex2exp包,直接将LaTeX内容作为固定参数传入label即可:

library(ggplot2)
library(ggtext)
library(ggdist)

set.seed(123)
DF <- rbind(data.frame('Label' = 'A', val = rnorm(200, 5)), 
            data.frame('Label' = 'B', val = rnorm(500, 10)))

ggplot(DF, aes(Label, val)) +
  stat_dots(aes(fill = Label)) +
  # 直接把LaTeX放在$之间即可,复杂表达式也支持
  geom_textbox(aes(x = -Inf, y = -Inf, hjust = 0, vjust = 0), 
               label = r'($\tau$)', 
               data = data.frame())

如果需要更复杂的LaTeX,直接修改$中间的内容即可,例如r'($\sum_{i=1}^{n} \frac{X_i}{\tau}$)'就可以渲染求和分式组合的表达式。

方案2:配合latex2exp使用,更换为geom_text

如果需要使用latex2exp生成的plotmath格式表达式,将geom_textbox替换为原生支持表达式的geom_text,同时开启parse = TRUE参数:

library(ggplot2)
library(ggdist)
library(latex2exp)

set.seed(123)
DF <- rbind(data.frame('Label' = 'A', val = rnorm(200, 5)), 
            data.frame('Label' = 'B', val = rnorm(500, 10)))

ggplot(DF, aes(Label, val)) +
  stat_dots(aes(fill = Label)) +
  geom_text(aes(x = -Inf, y = -Inf, hjust = 0, vjust = 0), 
            label = TeX(r'(\tau)'),
            parse = TRUE,
            data = data.frame())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:54:03