On the current theme of writing papers, I’ve been preparing figures in R using ggplot2 for a manuscript. I need to put subscripts, greek letters and other non-standard bits of text into facet labels and axis labels, mostly to denote the units of a variable. I found that there are multiple ways to achieve this and unfortunately it seems like different ways are necessary in different contexts, however, a lot of what I needed to do could be covered by `expression()`

, which constructs mathematical expressions in R using “plotmath” syntax.

I wrote notes on how to accomplish different tasks requiring plotmath and I thought I would put those notes here. See below:

# Non-standard notation in ggplot2

`expression()`

notation:

- Basic arithmetic -
`expression(x + y - z %*% a %/% b %+-% e %~~% q != p)`

- (x plus y minus z times a divided-by b plus-or-minus e approximately q does-not-equal p)

- Juxtaposition -
`expression(paste(x, y, z))`

- Subscript -
`expression("cm"^2)`

,`expression("cm"^{x + y-2})`

`{}`

is used to group items together without adding brackets

- Superscript -
`expression("CO"[2])`

- To put a sub and superscript together:
`R[m]^2`

- To put a sub and superscript together:
- Degree symbol -
`expression(32 * degree)`

- The
`*`

signifies the start of a special character but without a space before it

- The
- Greek letters -
`expression(alpha - omega)`

- Brackets -
- Fractions -
`expression(frac('Top', 'Bottom'))`

- Roots -
`expression(sqrt(x, y))`

- The y root of x

- Typeface -
`expression(plain(x) italic(y) bold(z) bolditalic(a) underline(b)`

- Deliberate space -
`expression(x + phantom(0) + y)`

- Normal space -
`expression("leaf" ~ "area" ~ (cm^2))`

Notes:

`expression()`

can’t take spaces in quoted text,`expression("leaf area" ~ (cm^2))`

wouldn’t parse well, but`expression("leaf" ~ "area" ~ (cm^2))`

would be fine.

Example workflow for ggplot2 axis titles:

```
library(ggplot2)
library(dplyr)
library(tidyr)
area <- rnorm(n = 50, mean = 10, sd = 1)
leaf_chloro <- rnorm(n = 50, mean = 100, sd = 2)
groups <- rep(c("A", "B", "C", "D", "E"), times = 10)
df <- data.frame(area, leaf_chloro, groups)
ggplot(df, aes(x = groups, y = area)) +
geom_bar(stat = "identity", aes(fill = groups)) +
labs(x = "Group", y = expression("Leaf" ~ "area" ~ (cm^2)))
```

Facet labels:

```
df_long <- gather(df, key = var, value = value, -groups)
df_label <- df_long %>%
mutate(var_exp = factor(var,
levels = c("area", "leaf_chloro"),
labels = c(
expression("Leaf" ~ "area" ~ (cm^2)),
expression("Chlorophyll-" ~ alpha)
)))
ggplot(df_label, aes(x = groups, y = value)) +
geom_bar(stat = "identity", aes(fill = groups)) +
facet_wrap(~var_exp, labeller = label_parsed)
```

Axis labels:

```
ggplot(df, aes(x = groups, y = area)) +
geom_bar(stat = "identity", aes(fill = groups)) +
scale_x_discrete(labels = c(
"A" = expression(alpha),
"B" = expression(beta),
"C" = expression(gamma),
"D" = expression(epsilon),
"E" = expression(omega)))
```

Custom annotations and labels:

```
ggplot(df, aes(x = groups, y = area)) +
geom_bar(stat = "identity", aes(fill = groups)) +
geom_label(aes(x = 1, y = 25, label = "(alpha != Alpha)"),
parse = T)
```