library(tidyverse)
library(ggrepel)5 Introducción a ggplot2
- 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:
- datos (
data), - un mapeo estético (
aes()) que conecta variables con propiedades visuales (ejes, color, tamaño…), - una geometría (
geom_*) que decide cómo se dibujan los datos.
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")
aes() 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
Usando el dataset midwest (incluido en ggplot2):
- Grafica
percprof(% con título profesional) en X ypercpovertyknown(% de pobreza) en Y. - Colorea los puntos por
state. - Agrega una línea de tendencia con
geom_smooth(). - Etiqueta los condados con
geom_text_repel(). - Aplica títulos, una paleta de
paletteery un tema.
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.