Títulos

Cómo añadir el título de un gráfico en ggplot2

Anteriormente, vimos cómo realizar un gráfico con la librería ggplot2, sin embargo, sería interesante añadir algunos detalles básicos al gráfico como son el título, subtítulo y el texto al pie indicando la fuente de los datos.

Para ello, utilizamos la función labs() y los argumentos:

  • title: para indicar el título

  • subtitle: para indicar el subtítulo

  • caption: para detallar el pie de página con la fuente de información

También es posible añadir una etiqueta en la parte superior izquierda del plot, con la opción tag o un alt-text, con el argumento alt.

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. elartedeldato.com"
  )

Otra opción para añadir el título sería con la función ggtitle().

ggplot(msleep, aes(x = sleep_total, y = sleep_rem, color = vore)) +
  geom_point() +
  ggtitle(label = "El sueño de los mamíferos", subtitle = "Sueño REM frente a las horas totales de sueño") +
  labs(caption = "Proceedings of the National Academy of Sciences, 104 (3):1051-1056, 2007. elartedeldato.com")

Recordemos que especificar los argumentos es opcional siempre que se mantenga el orden por defecto de los mismos, por lo que un código equivalente al anterior sería:

ggplot(msleep, aes(sleep_total, sleep_rem, color = vore)) +
  geom_point() +
  ggtitle("El sueño de los mamíferos", "Sueño REM frente a las horas totales de sueño") +
  labs(caption = "Proceedings of the National Academy of Sciences, 104 (3):1051-1056, 2007. elartedeldato.com")

Finalmente, podríamos modificar el título de los ejes para indicar más claramente, y en español, qué representa cada eje y en qué unidades. En el próximo post, vermos cómo hacerlo.

Cómo personalizar el título de un gráfico en ggplot2

Después de saber cómo añadir el título a un gráfico de ggplot2, veremos cómo personalizar el título de un gráfico en ggplot2, por ejemplo para cambiar la fuente del título o centrar el título en un gráfico. Para ello introducimos la función theme(). Recordemos que el tema controla los aspectos visuales del diseño del gráfico, como fuente o color de fondo del gráfico.

Pero antes de empezar, guardaremos el gráfico base en un objeto llamado p para evitar reproducir el mismo código en los próximos ejemplos.

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. elartedeldato.com"
  ) -> p

Cómo cambiar el estilo del título

Para cambiar el estilo del título utilizamos el argumento plot.title dentro de la función theme().

p +
  theme(
    plot.title = element_text(size = 20, face = "bold")
  )

Cómo añadir un salto del línea al título

Para añadir un salto del línea al título, basta con introducir la secuencia \n en el punto donde queremos que se cambie de línea.

p +
  ggtitle(
    "El sueño \nde los mamíferos"
  )

Cómo cambiar la posición del título

Por ejemplo, si quisiéramos centrar el título, modificaríamos la opción hjust de element_text() con el valor 0.5.

p +
  theme(
    plot.title = element_text(hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5)
  )

Cómo cambiar el tipo de fuente del título

Para modificar el tipo de fuente o familia del título, solo necesitamos indicar el argumento family en element_text().

p +
  theme(
    plot.title = element_text(family = "mono")
  )

Sin embargo, si queremos emplear una fuente específica, por ejemplo de Google Fonts, tendríamos que añadirla primero con la librería showtext.

library(showtext)

font_add_google("Bebas Neue")

showtext_auto()

p +
  theme(
    plot.title = element_text(family = "Bebas Neue", size = 20),
    plot.subtitle = element_text(family = "Bebas Neue")
  )

Advertencia

Un error muy común trabajando con fuentes es el siguiente:

Error in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y,  : 
  polygon edge not found
In addition: There were 50 or more warnings (use warnings() to see the first 50)

para solucionarlo, después de añadir la fuente, aplica la función showtext_auto() y listo! 🎉

Cómo añadir expresiones matemáticas al título

Para añadir una expresión matemática, como por ejemplo letras griegas, al título del gráfico, se utiliza la función expression(). Todo lo que se incluye dentro de la misma puede ser expresado en lenguaje matemático similar a LaTeX.

p +
  labs(
    title = expression(paste(alpha, delta, Omicron, 1000^2, x^(y + z), integral(f(x) * dx, a, b), sum(x[i], i == 1, n)))
  )

Para más información acerca de anotación matemática en R, puedes consultar aquí.

Cómo modificar los títulos de los ejes

Hasta ahora hemos cómo añadir y modificar el título principal de un gráfico, pero otro elemento esencial del que no nos podemos olvidar son los títulos del eje.

Por defecto, ggplot mostrará el nombre de la variable en el dataset, pero se pueden modificar utilizando la función labs() de la siguiente manera:

p + labs(x = "Horas de sueño en total", y = "Horas de sueño en fase REM")

Otra opción, es utilizar las funciones xlab() e ylab().

p +
  xlab("Horas de sueño en total") +
  ylab("Horas de sueño en fase REM") -> p
p

Cómo cambiar el estilo de los títulos de los ejes

De nuevo, al igual que para modificar el estilo del título en ggplot2, necesitamos recurrir a la función theme() para dar un estilo diferente a los títulos de los ejes del gráfico.

library(showtext)

font_add_google("Bebas Neue")

showtext_auto()

p + 
  theme(
    axis.title.x = element_text(family = "Bebas Neue", size = 14),
    axis.title.y = element_text(family = "Bebas Neue", size = 14)
) 

También podríamos personalizar el color, el grosor o el margen de los títulos, además de los que veremos continuación.

Advertencia

Recuerda que si obtienes el siguiente error:

Error in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y,  : 
  polygon edge not found
In addition: There were 50 or more warnings (use warnings() to see the first 50)

después de añadir la fuente, aplica la función showtext_auto().

Cómo cambiar la posición de los títulos de los ejes

Para modificar la posición de los títulos de los ejes sobre le mismo, utilizaremos el argumento hjust dentro de la función element_text() con los argumentos axis.title.x y axis.title.y de theme().

p + theme(
  axis.title.x = element_text(hjust = 1),
  axis.title.y = element_text(hjust = 1)
)

Asignando el valor hjust=1 llevaremos el texto al final del eje. Si por el contrario deseásemos justificarlo al inicio del eje, deberíamos asignarle el valor 0.

Nota

De forma equivalente, podríamos haber modificado simultáneamente ambos ejes con axis.title, sin especificar si nos referimos al eje x o y.

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

En ocasiones, especialmente en el entorno académico, es habitual querer añadir expresiones a los títulos de los ejes, como por ejemplo letras griegas. Ésto es posible gracias a la función expression().

p + 
  labs(x = expression(
    paste(alpha, delta, Omicron, 1000^2, x^(y + z), integral(f(x) * dx, a, b), sum(x[i], i == 1, n)
          )
    )
    )

En resumen
  • theme(plot.title = element_text(...)) si quieres cambiar el estilo del título

  • \n para el salto de línea

  • theme(plot.title = element_text(hjust=0.5) para centrar el título

  • theme(plot.title = element_text(family='Bebas Neue')) con library(showtext); font_add_google('Bebas Neue') para utilizar fuentes de Google Fonts

  • labs(title = expression(paste(...))) si quieres usar expresiones matemáticas en el título

  • labs(x=..., y=...) o xlab(), ylab() para añadir títulos a los ejes

  • theme(axis.title=element_text(...) si quieres cambiar el estilo del título de los ejes

  • theme(axis.title=element_text(hjust=1)) para posicionar el título de los ejes al final de los mismos

  • labs(x=expression(paste(...))) si quieres usar expresiones matemáticas en el título de los ejes