Cómo añadir expresiones en la leyenda en ggplot2

En el último apartado del post anterior, vimos cómo añadir expresiones al título de la leyenda, pero en ocasiones las expresiones están en los propios valores de la misma. Hoy veremos cómo añadir estas expresiones en la leyenda de un gráfico de ggplot2.
Cómo añadir expresiones en la leyenda de un gráfico de ggplot2
Dado que seguimos trabajando con los datos de posts anteriores y este dataset no contiene ninguna variable con expresiones matemáticas, generaremos una variable nueva new_vore
que contenga dichas expresiones.
library(ggplot2)
msleep$new_vore <- as.factor(msleep$vore)
levels(msleep$new_vore) <- c('alpha', 'beta', 'gamma', 'delta', 'NA')
Por defecto, ggplot representará literalmente los valores de la leyena sin interpretarlos.
ggplot(msleep, aes(x=sleep_total, y=sleep_rem, color=new_vore)) +
geom_point()
La primera alternativa que presentamos es la más sencilla, aunque requiere cargar un paquete adicional que suele utilizarse para trabajar con escalas de la estética en ggplot, principalemnte. Hablamos del paquete scales
.
La función parse_format()
nos pemitirá interpretar los valores de la leyenda adecuadamente.
library(scales)
ggplot(msleep, aes(x=sleep_total, y=sleep_rem, color=new_vore)) +
geom_point() +
scale_color_discrete(labels=parse_format())
Cómo añadir expresiones en la leyenda sin utilizar otras librerías
Una segunda alternativa sin pasar por otras librerías es hacerlo manualmente modificando el argumento labels
de scale_color_discrete()
.
Utilizando expression()
ggplot(msleep, aes(x=sleep_total, y=sleep_rem, color=new_vore)) +
geom_point() +
scale_color_discrete(labels=c(alpha = expression(alpha),
beta = expression(beta),
gamma = expression(gamma),
delta = expression(delta)))
Utilizando bquote()
ggplot(msleep, aes(x=sleep_total, y=sleep_rem, color=new_vore)) +
geom_point() +
scale_color_discrete(labels=list(bquote(alpha),
bquote(beta),
bquote(gamma),
bquote(delta)))
Como vemos esta alternativa es algo más tediosa, ya que obliga a modificar cada valor uno a uno.