Notas de Clase - 2

Author

Estación R

Introducción a la Visualización de Datos con R

Clase 2: Capas en ggplot2, Themes y Escalas

Preparación de los datos

Comenzamos cargando las librerías necesarias y preparando nuestros datos de ejemplo:

library(tidyverse)

# Cargar datos
df_eph <- read.csv("datos/base_practica.csv")

# Crear tabla de ocupados por año (ESTADO == 1)
tbl_desocup_2020_25 <- df_eph %>%
  filter(ESTADO == 1) %>%
  count(ANO4) %>%
  rename("Anio" = "ANO4")

# Crear tabla para subconjunto 2022-2025
tbl_desocup_2022_25 <- df_eph %>%
  filter(ESTADO == 1, ANO4 %in% 2022:2025) %>%
  count(ANO4) %>%
  rename("Anio" = "ANO4")

1. Superposición de Geometrías

1.1 Múltiples Geometrías en un Solo Gráfico

Una característica poderosa de ggplot2 es la capacidad de superponer diferentes geometrías:

ggplot(
  data = tbl_desocup_2020_25,
  mapping = aes(x = Anio, y = n)
) +
  geom_col() +     # Barras
  geom_line() +    # Línea
  geom_point()     # Puntos

Explicación: Cada geom_*() agrega una nueva capa visual al mismo gráfico. El orden importa: las capas se superponen según el orden de aparición en el código.


2. Uso de Datasets Diferentes por Geometría

2.1 Especificando Data por Geometría

Podemos usar diferentes conjuntos de datos para cada geometría:

ggplot(mapping = aes(x = Anio, y = n, fill = as.factor(Anio))) +
  geom_line(data = tbl_desocup_2020_25) +                    # Dataset completo
  geom_col(data = tbl_desocup_2022_25) +                     # Subset 2022-2025  
  geom_point(data = tbl_desocup_2022_25 %>%                  # Solo 2024
               filter(Anio == 2024))

Conceptos clave: - mapping se especifica en ggplot() para que sea heredado por todas las geometrías - Cada geometría puede usar un dataset diferente con el parámetro data - Los aesthetics se mantienen consistentes entre capas

2.2 Verificando Datos Filtrados

Siempre es buena práctica verificar los datos que estamos utilizando:

# Verificar qué contiene nuestro filtro de 2024
tbl_desocup_2022_25 %>%
  filter(Anio == 2024)

3. Separando Data y Mapping

3.1 Construcción Paso a Paso

Una aproximación más explícita es especificar data y mapping para cada geometría:

ggplot() +
  geom_line(
    data = tbl_desocup_2020_25,
    mapping = aes(x = Anio, y = n)
  ) +
  labs(fill = "Años") +
  ylim(c(0, max(tbl_desocup_2020_25$n))) +    # Límites dinámicos
  xlim(2019, 2026)                            # Límites fijos

Ventajas: - Mayor control sobre cada elemento - Fácil debugging cuando algo no funciona - Claridad sobre qué datos usa cada geometría


4. Escalas de Variables Categóricas

4.1 Transformando Variables Continuas a Categóricas

Para mejor control de etiquetas, podemos tratar años como factores:

ggplot(tbl_desocup_2020_25, aes(x = factor(Anio), y = n)) +
  geom_col(fill = "#4F7CFF") +
  scale_x_discrete(
    labels = paste0("Año ", tbl_desocup_2020_25$Anio)  # Etiquetas personalizadas
  ) +
  labs(x = "Año") +
  theme_minimal()

Conceptos importantes: - factor(Anio): Convierte números a categorías - scale_x_discrete(): Controla escalas de variables categóricas - paste0(): Crea etiquetas dinámicas concatenando texto


5. Escalas de Color

5.1 Paletas de Colores Continuas

library(RColorBrewer)  # Para paletas de colores adicionales

ggplot(tbl_desocup_2020_25, aes(x = Anio, y = n, fill = Anio)) +
  geom_col() +
  scale_fill_viridis_c() +    # Paleta viridis para variables continuas
  theme_minimal() +
  guides(fill = "none")       # Ocultar leyenda

Paletas disponibles: - scale_fill_viridis_c(): Paleta viridis (buena para accesibilidad) - scale_fill_gradient(): Gradiente personalizable - Paletas de RColorBrewer: scale_fill_brewer()


6. Trabajando con Datos Reales de la EPH

6.1 Explorando la Estructura de Datos

# Verificar las columnas disponibles
colnames(df_eph)

6.2 Descarga Directa con el Paquete eph

library(eph)

# Descargar microdatos de la EPH
df_eph <- get_microdata(
  year = 2020:2023, 
  period = 3,  # Tercer trimestre
  vars = c("ANO4", "AGLOMERADO", "ESTADO")
)

Explicación: - get_microdata(): Función del paquete eph para descargar datos oficiales - year: Años a descargar - period: Trimestre (1-4) - vars: Variables específicas a incluir

6.3 Análisis por Aglomerado

# Crear tabla por aglomerado y estado laboral
df_por_aglo <- df_eph |>
  filter(ESTADO %in% c(1, 2)) |>  # Solo ocupados (1) y desocupados (2)
  count(AGLOMERADO, ANO4, ESTADO, name = "cantidad")

# Calcular porcentajes
df_por_aglo_porc <- df_por_aglo %>%
  group_by(AGLOMERADO, ANO4) %>%
  mutate(porcentaje = cantidad / sum(cantidad) * 100)

Conceptos clave: - filter(ESTADO %in% c(1, 2)): Filtrar múltiples valores - count(..., name = "cantidad"): Contar observaciones con nombre personalizado - group_by() + mutate(): Cálculos por grupos


7. Visualización con Facetas

7.1 Gráficos Múltiples por Categoría

df_por_aglo_porc %>%
  filter(AGLOMERADO %in% 1:10) %>%       # Primeros 10 aglomerados
  ggplot(aes(x = ANO4, y = porcentaje)) +
  geom_line(aes(color = factor(AGLOMERADO)), size = 1.2) +
  facet_wrap(facet = "ESTADO") +         # Separar por estado laboral
  theme_minimal()

Conceptos nuevos: - facet_wrap(): Crear múltiples paneles basados en una variable - aes(color = factor()): Asignar colores por categoría - Filtrado con %in%: Seleccionar múltiples valores

Parámetros de facet_wrap(): - facet = "VARIABLE": Variable para crear facetas - ncol = n: Número de columnas - scales = "free": Escalas independientes por faceta


Conceptos Clave para Recordar

  1. Superposición de capas: Cada geom_*() agrega una nueva capa visual
  2. Data específica por geometría: Puedes usar diferentes datasets para cada capa
  3. Construcción explícita: Separar data y mapping da mayor control
  4. Variables categóricas: Usar factor() y scale_x_discrete() para mejor control de etiquetas
  5. Paletas de colores: scale_fill_viridis_c() y otras opciones para escalas continuas
  6. Datos reales: El paquete eph facilita el trabajo con microdatos oficiales
  7. Facetas: facet_wrap() para dividir gráficos por categorías
  8. Filtrado avanzado: %in% para seleccionar múltiples valores

Buenas Prácticas

Verificación de Datos

# Siempre verificar los datos filtrados
tbl_desocup_2022_25 %>% filter(Anio == 2024)

# Explorar la estructura de datos nuevos
colnames(df_eph)

Orden de Capas

  • Las capas se superponen según el orden en el código
  • Colocar elementos de fondo primero, detalles al final

Escalas Dinámicas

ylim(c(0, max(datos$variable)))  # Límites basados en los datos

Trabajando con Grupos

# Patrón común: filter -> group_by -> mutate/summarise
datos %>%
  filter(condicion) %>%
  group_by(variable_agrupacion) %>%
  mutate(nueva_variable = calculo)

Flujo de Trabajo Recomendado

  1. Explorar los datos: colnames(), head(), summary()
  2. Filtrar y transformar: Crear subconjuntos relevantes
  3. Construir gráfico básico: Una geometría a la vez
  4. Agregar capas: Superponer según necesidad
  5. Ajustar escalas: Colores, etiquetas, límites
  6. Aplicar facetas: Si hay múltiples categorías a comparar

Ejercicios Sugeridos

  1. Crear un gráfico que combine líneas y barras usando diferentes subconjuntos de datos
  2. Experimentar con diferentes paletas de colores continuas
  3. Crear facetas por diferentes variables categóricas
  4. Descargar datos de la EPH para otros períodos y crear visualizaciones comparativas
  5. Combinar filtros complejos con visualizaciones por aglomerado
  6. Explorar el efecto del orden de las capas en la visualización final

Recursos Adicionales

  • Paquete eph: Para trabajar con datos oficiales de empleo
  • RColorBrewer: Paletas de colores especializadas
  • Documentación de ggplot2: Para explorar más opciones de escalas y facetas
  • Cheat sheet de ggplot2: Referencia rápida de funciones

Glosario de Funciones

  • geom_col(): Gráfico de barras
  • geom_line(): Gráfico de líneas
  • geom_point(): Gráfico de puntos
  • factor(): Convierte variable a categórica
  • scale_x_discrete(): Controla escala de variable categórica
  • scale_fill_viridis_c(): Paleta de colores continua
  • facet_wrap(): Múltiples paneles por categoría
  • guides(): Control de leyendas
  • xlim() / ylim(): Límites de ejes

Notas de la Clase 3 - Curso “Introducción a la Visualización de Datos con R”