🌟 Taller: Visualización de datos con R y ggplot2

Estructura y contenido del taller

Pablo Tiscornia

Estación R

2025-09-02

Bienvenidos y bienvenidas a Estación R

Contacto con Estación R



💬 Slack

🔗 Web

✉️ Correo

🐘 Mastodon

𝕏 X

[in] LinkedIn

[ig] Instagram

Presentación


Puesta a punto ⚙️

Plataformas y herramientas durante la cursada

Rstudio

Armá tu entorno de trabajo


Descargá este dataset através ejecutando el siguiente código:

df_eph <- read.csv("https://raw.githubusercontent.com/Estacion-R/Curso---R-Viz/refs/heads/main/datos/eph_2020_25.csv?token=GHSAT0AAAAAADDAADKOUWHHX7O3RLOFN6EQ2FXKU7A")

🧭 Objetivos del taller

Al finalizar este taller podrás:

  • Comprender los principios fundamentales de la visualización
  • Construir gráficos efectivos y reproducibles con {ggplot2}
  • Aplicar estrategias de diseño para mejorar la estética
  • Crear visualizaciones interactivas y anotadas
  • Trabajar con datos reales

📚 Programa del taller

Encuentro 1: Fundamentos

🔍 ¿Por qué visualizar?

  • El rol de la visualización en análisis y comunicación
  • Gramática de los gráficos: data + aesthetics + geoms


🎨 Primeros pasos con ggplot2

  • Sintaxis básica: ggplot(data, aes(x, y)) + geom_*()
  • Gráficos de barras, puntos y líneas
  • Variables categóricas vs. continuas

Encuentro 2: Diseño y estética

🎨 Personalización visual

  • Control de títulos, colores y tamaños
  • Paletas de colores
  • Organización espacial con facet_wrap(), {patchwork}


✨ Buenas prácticas de diseño

  • Contraste, jerarquía, balance visual
  • Identificar malas prácticas
  • Preparación para publicación

Encuentro 3: Anotaciones, Interactividad y Publicación

📝 Anotaciones inteligentes

  • annotate(), geom_text() y geom_label()
  • Uso de {ggannotate} para exportar código


🚀 Gráficos interactivos

  • ggplotly() y nociones de {plotly}
  • Exportación con ggsave()
  • Narrativas visuales efectivas :::

La gramática de los gráficos 📜

Componentes esenciales


1. Data 📊

Los datos que queremos visualizar


2. Aesthetics 🎨

Mapeo de variables a propiedades visuales (x, y, color, size)


3. Geoms 📈

Objetos geométricos que representan los datos (puntos, líneas, barras)

data

ggplot(data= <DATA>)

mapping

ggplot(data= <DATA>,
       mapping = aes(x = <VAR_X>, 
                     y = <VAR_Y>)
       )

geometries

ggplot(data= <DATA>,
       mapping = aes(x = <VAR_X>, 
                     y = <VAR_Y>)
       ) +
  geom_col()

Ejemplo práctico: primer gráfico

# Tabla desocupación para los períodos 2020-2025
tbl_desocup_2020_25
# A tibble: 5 × 2
   Anio     n
  <int> <int>
1  2020  1563
2  2021  1737
3  2022  1335
4  2023  1279
5  2024  1477

Ejemplo práctico: primer gráfico - Columnas

ggplot(data = tbl_desocup_2020_25,
       mapping = aes(x = Anio, y = n)) +
  geom_col()

tbl_desocup_2020_25
# A tibble: 5 × 2
   Anio     n
  <int> <int>
1  2020  1563
2  2021  1737
3  2022  1335
4  2023  1279
5  2024  1477

Ejemplo práctico: primer gráfico - Puntos

ggplot(data = tbl_desocup_2020_25,
       mapping = aes(x = Anio, y = n)) +
  geom_point()

Ejemplo práctico: primer gráfico - Líneas

ggplot(data = tbl_desocup_2020_25,
       mapping = aes(x = Anio, y = n)) +
  geom_line()

Ejercicio 🎯 - Experimentar con geoms

Con los datos tbl_desocup_2020_25, creá:


  1. Un gráfico de puntos con geom_point()
  2. Cambia el tamaño de los puntos (size = 4)
  3. Cambia el color a azul (color = "blue")
  4. Combina barras Y puntos en el mismo gráfico

Solución - Geoms

# Gráfico de puntos básico
ggplot(tbl_desocup_2020_25, 
      aes(x = Anio, y = n)) +
  geom_point()

# Con personalización
ggplot(tbl_desocup_2020_25, 
      aes(x = Anio, y = n)) +
  geom_point(size = 4, color = "blue")

# Combinado
ggplot(tbl_desocup_2020_25, 
      aes(x = Anio, y = n)) +
  geom_col(fill = "lightblue", alpha = 0.7) +
  geom_point(size = 4, color = "red")

Componentes extras ➕

1. Escalas (scales) 📏

Transformar datos en atributos visuales. Rangos y propiedades de los ejes


2. Facetas (facets) 💠

Dividir datos en subgráficos según categorías


3. Themes 🖌️

Controlar la apariencia general del gráfico

Scales 📏

ggplot(data= <DATA>,
       mapping = aes(x = <VAR_X>, 
                     y = <VAR_Y>)
       ) +
  geom_col() +
  scale_y_continuous(
    labels = scales::comma, 
    limits = c(0, 1000000))

Facets 💠

ggplot(data= <DATA>,
       mapping = aes(x = <VAR_X>, 
                     y = <VAR_Y>)
       ) +
  geom_col() +
  facet_wrap(~ <VAR_FACET>)

Themes 🖌️

ggplot(data= <DATA>,
       mapping = aes(x = <VAR_X>, 
                     y = <VAR_Y>)
       ) +
  geom_col() +
  theme(
    panel.background = element_rect(fill = "lightblue"),
    panel.grid.major = element_line(color = "white"),
    axis.title = element_text(size = 14, face = "bold")
  )

Seteo de parámetros

Para todos los geoms (todas las capas)


ggplot(data= tbl_desocup_2020_25,
       mapping = aes(x = Anio, 
                     y = n)) +
  geom_col()

Para un geom específico (una capa)



ggplot() +
  geom_col(
    data= tbl_desocup_2020_25,
    mapping = aes(x = Anio, 
                     y = n))

Seteo de parámetros - en ggplot()

ggplot(data= tbl_desocup_2020_25,
       mapping = aes(x = Anio, 
                     y = n)) +
  geom_col() +
  geom_point(size = 3, color = "red")

Seteo de parámetros - en geom_*

ggplot() +
  geom_col(
    data= tbl_desocup_2020_25,
    mapping = aes(x = Anio, 
                  y = n)) +
  geom_point(
    data= tbl_desocup_2020_25,
    mapping = aes(x = Anio,
                  y = n),
    size = 3, color = "red")

Caso de uso de seteo por capas

tbl_ocupados_2020_25 <- df_eph |> 
  filter(ESTADO == 1) |> 
  count(ANO4, ESTADO)

ggplot() +
  geom_col(
    data= tbl_desocup_2020_25,
       mapping = aes(x = Anio, 
                     y = n),
    fill = "#4F7CFF") +
  geom_point(
    data= tbl_ocupados_2020_25,
    mapping = aes(x = ANO4,
                  y = n),
    size = 3, color = "red")

Otra capa

tbl_ocupados_2020_25 <- df_eph |> 
  filter(ESTADO == 1) |> 
  count(ANO4, ESTADO)

ggplot() +
  geom_col(
    data= tbl_desocup_2020_25,
       mapping = aes(x = Anio, 
                     y = n),
    fill = "#4F7CFF") +
  geom_point(
    data= tbl_ocupados_2020_25,
    mapping = aes(x = ANO4,
                  y = n),
    size = 3, color = "red")

aes() y la conexión al dataset

ggplot() +
  geom_col(
    data= tbl_desocup_2020_25,
       mapping = aes(x = Anio, 
                     y = n),
    fill = "#4F7CFF")

ggplot() +
  geom_col(
    data= tbl_desocup_2020_25,
       mapping = aes(x = Anio, 
                     y = n,
                     fill = Anio))

Ejercicio práctico 🎯

Tu turno: Mapeo vs Fijación

  1. Todas las barras azules (fijación)
  2. Color diferente por año (mapeo)

¿Cuál es cuál?

# Versión A
ggplot(tbl_desocup_2020_25, 
      aes(x = Anio, 
          y = n, 
          fill = factor(Anio))) +
  geom_col()

# Versión B  
ggplot(tbl_desocup_2020_25, 
      aes(x = Anio, 
          y = n)) +
  geom_col(fill = "blue")

Variables y tipos de gráficos

Variable continua vs. categórica

Continuas

  • Números con infinitos valores posibles
  • Ejemplos: altura, peso, temperatura
  • Gráficos: dispersión, líneas, histogramas, densidad

geom_point() geom_line() geom_histogram(), geom_density()

Categóricas

  • Categorías o grupos discretos
  • Ejemplos: género, país, tratamiento
  • Gráficos: barras, cajas, torta

geom_col(),

Ejercicio práctico 🎯

🔍 Ejercicio 1: Identifica los componentes

ggplot(tbl_desocup_2020_25, 
       aes(x = Anio, y = n, fill = factor(Anio))) +
  geom_col() +
  scale_y_continuous(labels = scales::comma) +
  theme_minimal() +
  labs(title = "Desocupación 2020-2025")

¿Podés identificar?

📌 Data:


📌 Aesthetics:


📌 Geom:


📌 Scale:


📌 Theme:

🔍 Ejercicio 1: resolución

ggplot(tbl_desocup_2020_25, 
       aes(x = Anio, y = n, fill = factor(Anio))) +
  geom_col() +
  scale_y_continuous(labels = scales::comma) +
  theme_minimal() +
  labs(title = "Desocupación 2020-2025")

¿Podés identificar?

📌 Data: tbl_desocup_2020_25


📌 Aesthetics: x = Anio, y = n, fill = factor(Anio)


📌 Geom: geom_col()


📌 Scale: scale_y_continuous()


📌 Theme: theme_minimal()

🎯 Experimentar con geoms


Con los datos tbl_desocup_2020_25, crea:

  1. Un gráfico de puntos con geom_point()
  2. Cambia el tamaño de los puntos (size = 4)
  3. Cambia el color a azul (color = "blue")
  4. Combina barras Y puntos en el mismo gráfico

Solución

# Gráfico de puntos básico
ggplot(tbl_desocup_2020_25, aes(x = Anio, y = n)) +
  geom_point()

# Con personalización
ggplot(tbl_desocup_2020_25, aes(x = Anio, y = n)) +
  geom_point(size = 4, color = "blue")

# Combinado
ggplot(tbl_desocup_2020_25, aes(x = Anio, y = n)) +
  geom_col(fill = "lightblue", alpha = 0.7) +
  geom_point(size = 4, color = "red")

Personalización y temas

Sistema de temas de ggplot2

theme_minimal()
Limpio y moderno

theme_classic()
Estilo académico

theme_void()
Sin elementos

Recomendación: Comenzar con theme_minimal() y personalizar desde ahí

Paletas de colores accesibles

Con RColorBrewer

# Paleta cualitativa
scale_fill_brewer(type = "qual", palette = "Set2")

# Paleta secuencial  
scale_fill_brewer(type = "seq", palette = "Blues")

# Paleta divergente
scale_fill_brewer(type = "div", palette = "RdYlBu")

Accesible

Profesional

Variado

Recursos adicionales 📚

Para seguir aprendiendo

Recursos

Libros esenciales

  • R for Data Science (Wickham & Grolemund)
  • ggplot2: Elegant Graphics (Wickham)
  • Fundamentals of Data Visualization (Wilke)

Comunidad y ayuda

🌐 Comunidades online

📱 En redes sociales

  • #RStats/#ggplot en Twitter/X
  • r/rstats en Reddit
  • LinkedIn R User Groups

¡Gracias!

🎉 ¡A visualizar se ha dicho!

Contacto

📧 pablotiscornia@estacion-r.com

🌐 www.estacion-r.com

🐦 @estacion_erre