Cómo modificar los títutos de las facetas en ggplot2

Ya hemos visto cómo añadir facetas en ggplot2. Hoy veremos cómo modificar los títulos de las facetas puesto que no es una tarea trivial, especialmente cuando se trata de añadir expresiones matemáticas a las mismas. Comenzamos.
library(ggplot2)
ggplot(msleep, aes(x=sleep_total, y=sleep_rem, color=vore)) +
geom_point() +
labs(title='El sueño de los mamíferos',
subtitle='Sueño REM frente a las horas totales de sueño',
caption='Proceedings of the National Academy of Sciences, 104 (3):1051-1056, 2007',
x='Horas de sueño en total', y='Horas de sueño en fase REM') +
theme(plot.title=element_text(family='Anton', size=20),
plot.subtitle=element_text(family='Anton'),
axis.title.x = element_text(family='Anton', face='bold', hjust=1),
axis.title.y = element_text(family='Anton', face='bold', hjust=1)) +
facet_wrap('vore') -> p
p
Cómo modificar los títulos de las facetas
Cómo ha ocurrido en otras ocasiones, para modificar aspectos específicos del estilo de los títulos, debemos recurrir la función theme()
. En este caso, strip.text
y strip.background
, nos permitirán jugar con los aspectos estéticos del los títulos de cada faceta.
library(showtext)
font_add_google('Anton')
p +
theme(strip.text=element_text(family = 'Anton', face='bold', size=14, hjust=0, color='white'),
strip.background=element_rect(fill='black'))
Cómo añadir expresiones matemáticas a los títulos de las facetas
Para añadir expresiones matemáticas, como letras griegas, en los títulos de las facetas, no es tan sencillo como vimos anteriormente en el título principal o los de los ejes. Ahora, debemos tener la expresión en forma de texto en el propio dato y parsearla dentro de la función facet_wrap
/facet_grid
, con labeller=label_parser
.
A modo de ejemplo, crearemos una nueva variable, sobre la que añadiremos una expresión matemática (a pesar de que para estos datos no tiene sentido).
msleep$new_vore <- as.factor(msleep$vore)
levels(msleep$new_vore)[1] <- 'x^y*alpha/betaintegral(f(x)*dx, a, b)'
ggplot(msleep, aes(x=sleep_total, y=sleep_rem, color=vore)) +
geom_point() +
facet_wrap('new_vore', labeller=label_parsed)
En resumen
Utiliza…
facet_wrap()
para construir paneles a partir de una variablefacet_grid()
para distribuirlos de forma regular (filas y columnas)theme(strip.text=element_text(...), strip.background=element_rect(...))
para personalizar los títulos de las facetasfacet_wrap(labeller=label_parsed)
para añadir expresiones matemáticas a los títulos de las facetas