I want to display LaTeX equations as the names on one of the axis, using basic plot. I will do this using the TeX() function from {latex2exp}.
Let us generate some dummy data:
library(dplyr)
Attaching package: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
n <-100tb <-tibble(class =rep(c("Model 1 with $X \\sim N(0,1)$","Model 2 with $X \\sim N(1,1)$"),each = n ),y =c(rnorm(n = n, mean =0, sd =1),rnorm(n = n, mean =1, sd =1) )) |>mutate(class =factor(class) )tb
# A tibble: 200 × 2
class y
<fct> <dbl>
1 "Model 1 with $X \\sim N(0,1)$" 1.06
2 "Model 1 with $X \\sim N(0,1)$" 1.51
3 "Model 1 with $X \\sim N(0,1)$" -0.442
4 "Model 1 with $X \\sim N(0,1)$" -0.427
5 "Model 1 with $X \\sim N(0,1)$" -1.00
6 "Model 1 with $X \\sim N(0,1)$" -0.194
7 "Model 1 with $X \\sim N(0,1)$" 0.619
8 "Model 1 with $X \\sim N(0,1)$" -0.751
9 "Model 1 with $X \\sim N(0,1)$" 2.20
10 "Model 1 with $X \\sim N(0,1)$" 0.176
# ℹ 190 more rows
The levels:
lvls <-levels(tb$class)lvls
[1] "Model 1 with $X \\sim N(0,1)$" "Model 2 with $X \\sim N(1,1)$"
par(mar =c(2.1, 10.1, 2.1, 2.1))boxplot( y ~ class,data = tb,horizontal =TRUE,las =1,xlab =NULL, ylab =NULL,yaxt ="n")# Setting the y axis (with the LaTeX expressions)axis(2, at =1:length(lvls), labels =c(latex2exp::TeX(lvls)),las =2)
Note
Unfortunately, the \mathcal{} is not supported by R.
Now, what if we want to add a new line to the labels? It becomes a bit ugly…
tb <-tibble(class =rep(c("$\\overset{\\normalsize{Model~1~with}}{X \\sim N(0,1)}$","$\\overset{\\normalsize{Model~2~with}}{X \\sim N(1,1)}$" ),each = n ),y =c(rnorm(n = n, mean =0, sd =1),rnorm(n = n, mean =1, sd =1) )) |>mutate(class =factor(class) )lvls <-levels(tb$class)par(mar =c(2.1, 7.1, 2.1, 2.1))boxplot( y ~ class,data = tb,horizontal =TRUE,las =1,xlab =NULL, ylab =NULL,yaxt ="n")# Setting the y axis (with the LaTeX expressions)axis(2, at =1:length(lvls), labels =c(latex2exp::TeX(lvls)),las =2)