如何在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
相关产品推荐
相关产品推荐

