6  Extensiones de ggplot y construcción de gráficos

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

En este capítulo ampliamos nuestro repertorio de geometrías para distintos tipos de variables. Usaremos diamonds (incluido en ggplot2) y economics para series de tiempo.

library(tidyverse)
library(paletteer)
library(ggridges)
library(lubridate)

6.1 Distribuciones de una variable numérica

6.1.1 Histograma

Un histograma agrupa una variable numérica en intervalos (bins):

ggplot(data = diamonds, aes(x = price)) +
  geom_histogram(color = "hotpink", fill = "white", bins = 15) +
  theme_minimal()

Tip¿Cuántos intervalos usar? Regla de Sturges

En vez de elegir bins al azar, podemos calcular cortes razonables:

breaks <- pretty(
  range(diamonds$price),
  n = nclass.Sturges(diamonds$price)
)
ggplot(diamonds, aes(x = price)) +
  geom_histogram(breaks = breaks, color = "hotpink", fill = "white")

6.1.2 Gráfico de densidad

ggplot(data = diamonds, aes(x = price, fill = cut)) +
  geom_density(adjust = 1.75, alpha = 0.3) +
  theme_minimal()

Con ggridges podemos apilar densidades por grupo (ridgeline plot):

ggplot(data = diamonds, aes(x = price, y = cut)) +
  geom_density_ridges2(fill = "hotpink", alpha = 0.3) +
  theme_minimal()

6.2 Una variable numérica y una categórica

El gráfico de violín combina la idea de un boxplot con la densidad. Le sumamos los puntos individuales con geom_jitter():

ggplot(data = diamonds, aes(x = cut, y = price, color = cut)) +
  geom_jitter(shape = 19, alpha = 0.05, show.legend = FALSE) +
  geom_violin(alpha = 0.6, show.legend = FALSE) +
  scale_color_paletteer_d("fishualize::Holacanthus_ciliaris") +
  theme_minimal()

6.3 Dos variables numéricas con muchos datos

Cuando hay tantos puntos que se solapan, geom_hex() resume la densidad en celdas hexagonales:

ggplot(data = diamonds, aes(x = table, y = price)) +
  geom_hex(bins = 40) +
  scale_fill_paletteer_c("grDevices::Purple-Yellow", direction = -1) +
  theme_minimal()

6.4 Series de tiempo

Preparamos los datos economics extrayendo el año con lubridate:

economics_2000 <- ggplot2::economics %>%
  mutate(date = as_date(date), year = year(date)) %>%
  filter(year > 2000)

Con geom_area() y formateo de ejes mediante scales:

ggplot(data = economics_2000, aes(x = date, y = unemploy)) +
  geom_area(color = alpha("orchid2", 0.6), fill = alpha("orchid2", 0.2)) +
  scale_y_continuous(labels = scales::label_number_auto()) +
  scale_x_date(breaks = scales::breaks_pretty(6),
               labels = scales::label_date(format = "%Y")) +
  theme_classic()

6.5 Facetas: un panel por grupo

facet_wrap() divide el gráfico en sub-paneles según una variable:

ggplot(data = economics_2000, aes(x = date, y = unemploy)) +
  geom_line() +
  scale_x_date(date_labels = "%b") +
  facet_wrap(~year, scales = "free") +
  theme_minimal()

6.6 Gráfico de barras apiladas

geom_bar() cuenta observaciones por categoría; con fill apilamos una segunda variable:

ggplot(data = diamonds, aes(x = cut, fill = fct_rev(clarity))) +
  geom_bar() +
  scale_fill_paletteer_d("RColorBrewer::RdPu", direction = -1) +
  theme_minimal()

Ejercicios

ImportantEjercicio 6.1 — Galería de gráficos

Usando el dataset diamonds (u otro de tu elección), produce cuatro gráficos distintos, cada uno con título, etiquetas, paleta de color y tema:

  1. Un histograma o densidad de una variable numérica.
  2. Un violín o boxplot comparando una numérica entre categorías.
  3. Un gráfico de barras apiladas.
  4. Una serie de tiempo o un geom_hex().

Para cada uno, escribe una frase interpretando qué muestra.