Cómo modificar el tema en ggplot

Pasado el ecuador del Calendario de adviento 2021, nos centramos hoy en uno de los asuntos más interesantes de un gráfico: el tema.

En ggplot, existen numerosos temas por defecto para elegir. Sobre todos ellos, se pueden ir haciendo modificaciones a nuestro gusto o preferencia e incluso guardarlos para utilizarlos posteriormente.

Hoy veremos qué temas por defecto nos ofrece ggplot2, cómo modfiicar cualquier tema y otros temas proporcionados por librerías extras.

Temas por defecto de ggplot2

Una de las características de ggplot es el famoso fondo gris y líneas de cuadrícula blancas que permite discernir los elementos del plano fácilmente. Su nombre es theme_gray() o tema gris y si no se indica ningún otro, será el tema que se asigne por defecto. Sin embargo, existen muchos otros.

Un ejemplo de tema diferentes es theme_minimal(), sencillo y minimalista.

library(ggplot2)
library(showtext)
font_add_google('Anton')

msleep$vore <- as.factor(msleep$vore)
levels(msleep$vore) <- c('carnívoro', 'herbívoro', 'insectívoro', 'omnívoro')

ggplot(msleep, aes(x=sleep_total, y=sleep_rem, color=vore)) +    
  geom_point() +
  theme_minimal() +
  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),
        strip.text=element_text(family='Anton', face='bold', size=14, hjust=0, color='white'),
        strip.background=element_rect(fill='black')) +
  facet_wrap('vore') -> p
p

Esta es la lista completo de temas que podemos aplicar sin necesidad de instalar otras librerías:

  • theme_bw(). El tema clásico de ggplot2 con fondo oscuro. Puede funcionar mejor para presentaciones mostradas con un proyector.

  • theme_linedraw(). Un tema con sólo líneas negras de varios anchos sobre fondos blancos, que recuerda a un dibujo de líneas. Tiene un propósito similar a theme_bw(). Tenga en cuenta que este tema tiene algunas líneas muy finas (« 1 pt) que algunas revistas pueden rechazar.

  • theme_light(). Un tema similar a theme_linedraw() pero con líneas y ejes de color gris claro, para dirigir más la atención hacia los datos.

  • theme_dark(). El primo oscuro de theme_light(), con tamaños de línea similares pero con un fondo oscuro. Es útil para hacer que las líneas finas de color resalten.

  • theme_minimal(). Un tema minimalista sin anotaciones de fondo.

  • theme_classic(). Un tema de aspecto clásico, con líneas en los ejes X e Y y sin líneas de cuadrícula.

  • theme_void(). Un tema completamente vacío.

  • theme_test(). Un tema para las pruebas unitarias visuales. Idealmente no debería cambiar nunca, excepto por las nuevas características.

Con la función theme_set(), podríamos por defecto configurar un tema para todos los gráficos de ggplot del proyecto sin necesidad de llamar continuamente a la función theme().

theme_set(theme_minimal())

ggplot(mtcars) +
  geom_point(aes(x = wt, y = mpg, colour = gear))

Cómo modificar un tema en ggplot

En realidad ya hemos visto en anteriores posts cómo modificar el tema de un gráfico en ggplot2. Básicamente, utilizaríamos la función theme() y sobre ella, podemos modificar cualquier aspecto relacionado con el aspecto del gráfico que no esté relacionado directamente con los datos: ejes, leyenda, color de fondo, cuadrícula, etc. Para saber más sobre todos los aspectos que se pueden modificar puedes consultar la documentación oficial de ggplot2.

En el próximo post veremos concretamente cómo modificar la cuadrícula, el color de fondo y los bordes de un plot.

Otros temas extra para ggplot

Existen otras librerías extra que nos permiten modificar el tema en un gráfico de ggplot2. Algunas de las más interesantes son las siguientes:

  • ggthemes Simple, con temas básicos pero alguno de ellos muy interesante, como el de la revista Economist.
library(ggthemes)

p + theme_economist()

  • hrbrthemes Para los amantes de la tipografía, esta librería se centra en el uso de la Arial Narrow, dando un aspecto elegante y sofisticado a cualquier gráfico.
library(hrbrthemes)
## NOTE: Either Arial Narrow or Roboto Condensed fonts are required to use these themes.
##       Please use hrbrthemes::import_roboto_condensed() to install Roboto Condensed and
##       if Arial Narrow is not on your system, please see https://bit.ly/arialnarrow
p + theme_ipsum()

Si conoces alguna más que no ha sido nombrada, escríbenos y las añadiremos al post! Gracias!

Paula L. Casado
Paula L. Casado
Data Scientist

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

Relacionado