如何在ggplot的文本框中使用LaTeX表达式
How to use LaTeX expression in textbox of ggplot
我有以下 ggplot
:
library(ggplot2)
library(ggtext)
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_textbox(aes(-Inf, -Inf, hjust = 0, vjust = 0, label = parse(text = TeX(r'(\tau)'))), data.frame())
基本上我想在 ggplot
window 中的 textbox
中编写 LaTeX
语法。在这里我给出了一个小例子,但是在我原来的例子中我有一个很大的 LaTeX
表达式。
使用上面的代码,出现以下错误:
Don't know how to automatically pick scale for object of type expression. Defaulting to continuous.
Error: Aesthetics must be valid data columns. Problematic aesthetic(s): label = parse(text = TeX("\tau")).
Did you mistype the name of a data column or forget to add after_stat()?
关于如何在 ggplot
中的 textbox
中使用 LaTeX
的任何指示都将非常有帮助。
感谢指点。
?latex2exp::latex2exp_supported()
似乎不包含 tau
,因此无法将其翻译成 plotmath
。一种解决方法是绘制一个空文本框并使用 annotate()
在其上放置一个图层,可以采用 LaTex,如 Svannoy here 所建议的那样。
ggplot(DF, aes(Label, val)) +
stat_dots(aes(fill = Label)) +
geom_textbox(x= -Inf, y= -Inf, hjust = 0, vjust = 0, label = "") +
annotate(geom='text',
x= -Inf, y= -Inf, hjust = 0, vjust = 0,
label= TeX(" $\hat{Y} = B_0 + B_1X_1",
output='character'), parse = TRUE)
这给出了以下情节。
但是,仍有一些未解决的问题 - 如何处理不受支持的表达式,例如 tau?
那个 TeX
调用的输出是
"paste(' ','',hat(paste('Y')),'',phantom() == phantom(),'B',phantom() [ {paste('0')} ],'',phantom() + phantom(),'B',phantom() [ {paste('1')} ],'X',phantom() [ {paste('1')} ],'')"
我们可以使用另一个 annotate
手动插入它,而不是搞乱它,而不是像 latex2expr
包后端这样的完整实现。鉴于,这不是漂亮的代码。
ggplot(DF, aes(Label, val)) +
stat_dots(aes(fill = Label)) +
geom_textbox(x= -Inf, y= -Inf, hjust = 0, vjust = 0, label = "") +
annotate(geom='text',
x= -Inf, y= -Inf, hjust = 0, vjust = 0,
label= TeX(" $\hat{Y} = B_0 + B_1X_1",
output='character'), parse = TRUE) +
annotate(geom = 'text',
x= -Inf, y= -Inf, hjust = -23.5, vjust = -0.20,
label = sprintf('%s', "\u03C4"), parse = T)
其中 tau 是 unicode 表示。最后,笨拙的部分是调整变量以使其位于正确的位置。
我有以下 ggplot
:
library(ggplot2)
library(ggtext)
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_textbox(aes(-Inf, -Inf, hjust = 0, vjust = 0, label = parse(text = TeX(r'(\tau)'))), data.frame())
基本上我想在 ggplot
window 中的 textbox
中编写 LaTeX
语法。在这里我给出了一个小例子,但是在我原来的例子中我有一个很大的 LaTeX
表达式。
使用上面的代码,出现以下错误:
Don't know how to automatically pick scale for object of type expression. Defaulting to continuous.
Error: Aesthetics must be valid data columns. Problematic aesthetic(s): label = parse(text = TeX("\tau")).
Did you mistype the name of a data column or forget to add after_stat()?
关于如何在 ggplot
中的 textbox
中使用 LaTeX
的任何指示都将非常有帮助。
感谢指点。
?latex2exp::latex2exp_supported()
似乎不包含 tau
,因此无法将其翻译成 plotmath
。一种解决方法是绘制一个空文本框并使用 annotate()
在其上放置一个图层,可以采用 LaTex,如 Svannoy here 所建议的那样。
ggplot(DF, aes(Label, val)) +
stat_dots(aes(fill = Label)) +
geom_textbox(x= -Inf, y= -Inf, hjust = 0, vjust = 0, label = "") +
annotate(geom='text',
x= -Inf, y= -Inf, hjust = 0, vjust = 0,
label= TeX(" $\hat{Y} = B_0 + B_1X_1",
output='character'), parse = TRUE)
这给出了以下情节。
但是,仍有一些未解决的问题 - 如何处理不受支持的表达式,例如 tau?
那个 TeX
调用的输出是
"paste(' ','',hat(paste('Y')),'',phantom() == phantom(),'B',phantom() [ {paste('0')} ],'',phantom() + phantom(),'B',phantom() [ {paste('1')} ],'X',phantom() [ {paste('1')} ],'')"
我们可以使用另一个 annotate
手动插入它,而不是搞乱它,而不是像 latex2expr
包后端这样的完整实现。鉴于,这不是漂亮的代码。
ggplot(DF, aes(Label, val)) +
stat_dots(aes(fill = Label)) +
geom_textbox(x= -Inf, y= -Inf, hjust = 0, vjust = 0, label = "") +
annotate(geom='text',
x= -Inf, y= -Inf, hjust = 0, vjust = 0,
label= TeX(" $\hat{Y} = B_0 + B_1X_1",
output='character'), parse = TRUE) +
annotate(geom = 'text',
x= -Inf, y= -Inf, hjust = -23.5, vjust = -0.20,
label = sprintf('%s', "\u03C4"), parse = T)
其中 tau 是 unicode 表示。最后,笨拙的部分是调整变量以使其位于正确的位置。