library(tidyverse)
library(paletteer)
library(ggridges)
library(lubridate)6 Extensiones de ggplot y construcción de gráficos
- 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.
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()
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
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:
- Un histograma o densidad de una variable numérica.
- Un violín o boxplot comparando una numérica entre categorías.
- Un gráfico de barras apiladas.
- Una serie de tiempo o un
geom_hex().
Para cada uno, escribe una frase interpretando qué muestra.