Cómo modificar el título de la leyenda en ggplot2

En ggplot2, modificar los títulos de un gráfico depende del elemento del mismo al que se refieran. Por ejemplo, para cambiar el título principal, ya vimos que necesitaba recurrir a la función labs() o ggtitle(). Muy parecido a la manera de modificar los títulos de los ejes. No obstante, en el caso de la leyenda, el proceso no es tan intuitivo. Hoy explicaremos exactamente cómo modificar el título de la leyenda en un gráfico en ggplot2 de R.

Cómo modificar el título de la leyenda

Seguimos trabajando con los datos sobre las horas de sueño de los mamíferos llamado msleep, un dataset estándar de la propia librería ggplot2.

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

Para modificar el título de la leyenda en ggplot, debemos hacer referencia a la estética del gráfico a la que va asociada.

En este caso, la leyenda hace referencia al color, por lo que dentro de la función labs() asignaremos al argumento color el valor del nuevo título. Es decir,

p + labs(color='Género')

De igual manera, para modificar la leyenda referida a cualquier otro elemento de la estética, utilizaríamos el nombre de dicho elemento. Por ejemplo, para el tamaño emplearímos el argumento size:

labs(size=...)

Para la transparencia, alpha:

labs(alpha=...)

Otra alternativa, sería utilizando la función de la escala de la estética correspondiente, en este caso scale_color_discrete().

p + scale_color_discrete('Género')

Cómo unificar varias leyendas en ggplot2

Otro caso interesante es cuando trabajamos con varias leyendas asignadas a la misma variable. En estos casos, por defecto ggplot generará una leyenda para cada variable, pero generalmente el objetivo es tener una sola leyenda, ya que se refiere a una sola variable.

Imaginemos entonces que tomamos la variable awake, horas despierto, para la transparencia de los puntos y su tamaño. De esta forma, conseguimos enfatizar el efecto de la variable en la visualización.

ggplot(msleep, aes(x=sleep_total, y=sleep_rem, alpha=awake, size=awake)) +      
  geom_point()

Por defecto, ggplot va a generar dos leyendas diferentes, una para cada estética.

¿Cómo podemos hacer para unificar ambas leyendas? Es muy sencillo. Simplemente, deberemos cambiar los nombres de los títulos y asignar el mismo a ambas con la función labs():

ggplot(msleep, aes(x=sleep_total, y=sleep_rem, alpha=awake, size=awake)) +      
  geom_point() +
  labs(alpha='Horas despierto', size='Horas despierto')

En este punto, debemos de tener en cuenta si la variable es continua o discreta. Incluso siendo continua, como es el caso, si ggplot2 la discretiza o no. Ya que, para unificar las leyendas, ambas deben ser del mismo tipo.

Cómo añadir expresiones a los títulos de la leyenda

Al igual que en título principal o para los títulos de los ejes, si queremos añadir en el título de la leyenda expresiones matemáticas recurrimos a la función expression() de la siguiente manera:

p + labs(color=expression(paste(alpha, beta, gamma)))

En el próximo capítulo veremos cómo añadir este tipo de expresiones en las etiquetas de la leyenda en vez de en el título.

En resumen

Utiliza…

  • labs(color=..., size=...) para modificar los títulos de las leyendas

  • labs(alpha='Horas despierto', size='Horas despierto') utiliza el mismo nombre en cada estética para unificar la layenda

  • labs(color=expression(...)) para añadir expresiones matemáticas en el título de la leyenda

Paula L. Casado
Paula L. Casado
Data Scientist

Científica de datos especializada en visualización de datos.

Relacionado