El arte de {ggplot2} bien contado

Introducción

Si existe una librería por excelencia con la que hacer gráficos en R, esa es ggplot2. Existen otras opciones como R base o lattice, pero sin duda una de las más utilizadas es ggplot2.

Esta librería está basada en La gramática de los gráficos, donde la filosofía principal es construir un gráfico mediante capas hasta llegar a la composición final.

En esta guía práctica trataremos de explicar los elementos principales de ggplot2, desde cómo hacer un gráfico de un tipo concreto hasta cómo añadir anotaciones sobre el mismo . El objetivo, es que tras haber recorrido la guía completa, seamos capaces de entender cómo funciona ggplot y cómo personalizar un gráfico hasta el último detalle. Además, daremos soluciones a los errores más comunes que nos podemos encontrar al utilizar ggplot.

Nota

Por practicidad, no ahondaremos en cuestiones sobre tratamiento o análisis de datos, o teoría avanzada de visualización de datos. Especialmente, en el capítulo de geometrías, no se ahonda en toda la teoría de visualización que existe detrás de cada gráfico, aunque todo esto podría llegar en un futuro 😉. Por el momento la guía está preparada para cualquier persona que quiera iniciarse en ggplot2 y aprender a utilizar cada una de las funciones que la componen.

En resumen, pasarás de hacer un gráfico como este

Código
library(ggplot2)
ggplot(mpg, aes(x = displ, y = hwy)) + 
  geom_point()

a este

Código
library(tidyverse)
library(lubridate)

df <- read.csv("https://raw.githubusercontent.com/elartedeldato/datasets/main/netflix_titles.csv")

df |>
  filter(str_detect(description, "high school")) |>
  mutate(year_added := year(mdy(date_added))) |>
  filter(!is.na(year_added)) |>
  group_by(year_added) |>
  count() -> df_year

ggplot(df_year) +
  geom_col(aes(x = year_added, y = n), fill = "red") +
  scale_x_continuous(breaks = df_year$year_added) +
  labs(
    title = "Netflix",
    subtitle = "Películas y series de Instituto",
    caption = "Fuente: Kaggle. elartedeldato.com"
  ) +
  annotate(
    geom = "text", label = "Enero",
    x = 2021, y = 10, hjust = 0.5, vjust = 0, 
    family = "Permanent Marker", size = 4, color = "white", angle = 45
    )+ 
  annotate(
    "curve", x = 2021, y = 9, xend = 2021, yend = 5, color = "white", curvature = -0.5, arrow = arrow(length = unit(0.03, "npc"))) +
  theme_netflix()

Componentes

Básicamente, todos los gráficos se construyen con la información que se quiere visualizar, véase los datos y de un mapeo, es decir, la descripción de cómo se mapean las variables de los datos a los atributos estéticos. Existen cinco componentes de mapeo:

  • Capas (Layers): Una capa es una colección de elementos geométricos, geoms, que representan lo que se ve en el gráfico (puntos, líneas, polígonos, etc) y transformaciones estadísticas, stats, que resumen los datos (agrupamiento, recuento de observaciones o ajuste de un modelo lineal).

  • Escalas (Scales): Las escalas convierten los valores del espacio de datos en valores del espacio estético (color, forma o tamaño). Las escalas también dibujan la leyenda y los ejes, que permiten leer los valores originales de los datos a partir del gráfico (un mapeo inverso).

  • Coordendas (Coord): Una coordenada, o sistema de coordenadas, describe cómo se mapean las coordenadas de los datos al plano del gráfico. Además del sistema de coordenadas cartesianas, también se pueden utilizar las coordenadas polares y las proyecciones cartográficas.

  • Facetas (Facets): Una faceta especifica cómo dividir el gráfico en paneles.

  • Tema (Theme): Un tema controla los aspectos visuales del diseño del gráfico, como fuente o color de fondo.

Instalación

La instalación del paquete es algo tan sencillo como

install.packages("ggplot2")

Para empezar, no necesitaremos más que cargarlo a través de la función library.

library(ggplot2)

Partimos de que ya sabemos cómo instalar R, pero de no ser así, en la web de RStudio encontrarás los pasos a seguir para descargarlo e instalarlo. También puedes acudir al libro escrito en español R para profesionales de los datos: una introducción por Carlos Gil Bellota (@gilbellosta) que explica en detalle cómo utilizar R de forma muy cercana y fácil de entender. Además, incluye un apartado específico sobre ggplot, Introducción a ggplot2.

Primer gráfico en ggplot2

Como seguramente ya habrás visto antes gráficos como este, te invito a dar el siguiente paso y realizar tu primer gráfico en ggplot con el siguiente código:

ggplot(data = msleep, aes(x = sleep_total, y = sleep_rem, color = vore)) +
  geom_point()

En R, no es obligatorio añadir el nombre del argumento de la función si los valores de entrada se indican en el orden por defecto. Por tanto, una sintaxis equivalente sería:

ggplot(msleep, aes(x = sleep_total, y = sleep_rem, color = vore)) +
  geom_point()

Las capas se añaden a través del símbolo + y, aunque es optativo, se aconseja empezar la siguiente capa en una línea nueva de código para mayor legibilidad.

Como ves, hacer un gráfico simple es relativamente sencillo. Lo bueno es que ggplot nos permite añadir toda la complejidad que se desee.

¿Qué faltaría para completar esta visualización? Lo primero, el título y la fuente al pie del gráfico. También sería interesante modificar los títulos de los ejes y traducirlos. Poco a poco iremos viendo como hacer todos esos cambios. De momento, en el próximo capítulo empezaremos por cómo añadir un título.

Nota

Aunque es ggplot bastante completo, cuenta con numerosas extensiones de contribuciones de entusiastas de R. Puedes echar aquí un vistazo y ver de cuáles se tratan.