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

如何在ggplot2折线图中用LaTeX数学模式添加带下标方程?

解决ggplot2中用LaTeX数学模式显示方程下标问题

方法一:使用ggplot2原生的plotmath解析

ggplot2支持通过plotmath语法渲染数学表达式,只需在geom_text中设置parse = TRUE,并将标签写成符合plotmath规则的字符串即可:

  • 下标用[]表示
  • 等号用==表示(普通=在plotmath里是赋值符号)

同时注意必须将x变量加入数据框,否则ggplot会找不到x映射导致报错。修改后的完整代码:

library(ggplot2)
x <- seq(0, 600, by = 150)
y1 <- 300 + 0.1 * x
y2 <- 450 + 0.2 * x

# 把x纳入数据框,避免映射报错
data <- data.frame(x, y1, y2)

z <- ggplot(data, aes(x = x)) +
  geom_line(aes(y = y1), color = "red") +
  geom_line(aes(y = y2), color = "blue") +
  # 用plotmath语法,配合parse=TRUE解析
  geom_text(aes(x = 0, y = 200, label = "Y[1] == a[1] + 0.1*x == 300 + 0.1*x"), 
            color = "red", hjust = 0, vjust = 1, parse = TRUE) +
  geom_text(aes(x = 0, y = 100, label = "Y[2] == a[2] + 0.2*x == 450 + 0.2*x"), 
            color = "blue", hjust = 0, vjust = 1, parse = TRUE) 
z

方法二:用ggtext包支持LaTeX原生语法

如果更习惯LaTeX的_下标写法,可以使用ggtext包的geom_richtext,它支持直接解析$包裹的LaTeX表达式:

library(ggplot2)
library(ggtext)

x <- seq(0, 600, by = 150)
y1 <- 300 + 0.1 * x
y2 <- 450 + 0.2 * x

data <- data.frame(x, y1, y2)

z <- ggplot(data, aes(x = x)) +
  geom_line(aes(y = y1), color = "red") +
  geom_line(aes(y = y2), color = "blue") +
  # 用$包裹LaTeX表达式,fill和label.color设为NA去掉文本框样式
  geom_richtext(aes(x = 0, y = 200, label = "$Y_1 = a_1 + 0.1x = 300 + 0.1x$"), 
                color = "red", hjust = 0, vjust = 1, fill = NA, label.color = NA) +
  geom_richtext(aes(x = 0, y = 100, label = "$Y_2 = a_2 + 0.2x = 450 + 0.2x$"), 
                color = "blue", hjust = 0, vjust = 1, fill = NA, label.color = NA) 
z

关于之前expression报错的说明

你之前用expression报错大概率是两个原因:

  1. 数据框未包含x变量,导致ggplot映射失败
  2. expression的语法使用错误,比如直接嵌套字符串时格式不对,配合parse=TRUE时无需单独用expression()包裹,直接写符合规则的字符串即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 00:43:13