5  Introducción a ggplot2

NoteResultados de aprendizaje
  • R3. Visualizar y analizar bases de datos en R.

ggplot2 es el paquete de visualización del tidyverse. Se basa en la gramática de gráficos: un gráfico se construye por capas que se suman con +. Los tres ingredientes mínimos son:

  1. datos (data),
  2. un mapeo estético (aes()) que conecta variables con propiedades visuales (ejes, color, tamaño…),
  3. una geometría (geom_*) que decide cómo se dibujan los datos.
library(tidyverse)
library(ggrepel)

5.1 Un gráfico de dispersión, capa por capa

Usaremos el dataset mtcars, incluido en R. Queremos relacionar el peso del automóvil (wt) con su rendimiento (mpg):

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

Agregamos color según el número de cilindros y una línea de tendencia:

ggplot(data = mtcars, aes(x = wt, y = mpg)) +
  geom_smooth(method = lm, se = FALSE, color = "lightcyan3") +
  geom_point(aes(color = as.factor(cyl)), shape = "square")

Tipaes() global vs. local

Lo que pones en aes() dentro de ggplot() aplica a todo el gráfico; lo que pones dentro de un geom_*() aplica solo a esa capa. Por eso el color va dentro de geom_point(): no queremos colorear también la línea de tendencia.

5.2 Etiquetas y títulos con labs()

ggplot(data = mtcars, aes(x = wt, y = mpg)) +
  geom_smooth(method = lm, se = FALSE, color = "lightcyan3") +
  geom_point(aes(color = as.factor(cyl)), shape = "square") +
  labs(
    x        = "Peso en toneladas",
    y        = "Millas/galón",
    title    = "Relación peso – rendimiento de automóviles",
    subtitle = "en el Gran Concepción",
    caption  = "Fuente: Asociación de Automovilistas de Concepción",
    color    = "Cilindros"
  )

5.3 Temas (theme_*) y ajustes finos

Los temas controlan la apariencia general. theme_minimal() es limpio y sobrio. Dentro de theme() ajustamos detalles, como centrar el título:

ggplot(data = mtcars, aes(x = wt, y = mpg)) +
  geom_point(aes(color = as.factor(cyl))) +
  labs(title = "Peso vs. rendimiento", color = "Cilindros") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5)
  )

5.4 Evitar etiquetas superpuestas con ggrepel

Cuando queremos etiquetar puntos, geom_text_repel() separa las etiquetas para que no se monten:

ggplot(data = mtcars, aes(x = wt, y = mpg)) +
  geom_point(color = "steelblue") +
  geom_text_repel(label = rownames(mtcars), size = 2.5, alpha = 0.6) +
  theme_minimal()

5.5 Paletas de color con paletteer

El paquete paletteer da acceso a cientos de paletas. Se combinan con scale_color_manual() o scale_fill_manual():

library(paletteer)

ggplot(data = mtcars, aes(x = wt, y = mpg, color = as.factor(cyl))) +
  geom_point() +
  scale_color_manual(
    values = paletteer_d("ltc::trio3", n = n_distinct(mtcars$cyl))
  ) +
  theme_minimal()

Ejercicios

ImportantEjercicio 5.1 — Educación y pobreza en el Midwest

Usando el dataset midwest (incluido en ggplot2):

  1. Grafica percprof (% con título profesional) en X y percpovertyknown (% de pobreza) en Y.
  2. Colorea los puntos por state.
  3. Agrega una línea de tendencia con geom_smooth().
  4. Etiqueta los condados con geom_text_repel().
  5. Aplica títulos, una paleta de paletteer y un tema.
ImportantEjercicio 5.2 — Tu propio gráfico con la Pokédex

Construye un gráfico de dispersión con la base de datos de la Pokédex del Chapter 4. Elige dos estadísticas (por ejemplo, ataque vs. defensa), colorea por tipo y añade títulos y tema.