如何在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报错大概率是两个原因:
- 数据框未包含x变量,导致ggplot映射失败
expression的语法使用错误,比如直接嵌套字符串时格式不对,配合parse=TRUE时无需单独用expression()包裹,直接写符合规则的字符串即可
内容的提问来源于stack exchange,提问作者ghx12
相关产品推荐
相关产品推荐

