Cheat Sheet 07

Visualización de Datos en R

Fecha de publicación

26 de septiembre de 2026


OFC Herramientas Cuantitativas para el Análisis de Datos
Ciencia Política y Relaciones Internacionales UAH

Conceptos centrales

La visualización de datos transforma información compleja en formas más simples de interpretar. Su función es explorar, analizar y comunicar; no existe un gráfico “correcto” único: la elección siempre es una decisión metodológica que depende del dato, el contexto y el receptor.

Antes de graficar es necesario identificar el tipo de variable, porque de eso depende el gráfico adecuado:

Tipo de variable Ejemplos
Categórica nominal Sexo, región, partido político
Categórica ordinal Nivel educativo, estrato socioeconómico
Cuantitativa discreta Número de hijos, número de encuestados
Cuantitativa continua Ingreso, edad, tasa de rotación laboral

La pregunta metodológica orienta el tipo de gráfico:

Pregunta metodológica Gráfico sugerido
¿Cómo se distribuye una variable? Histograma, boxplot, violín
¿Cuántos casos hay por categoría (frecuencia)? Gráfico de barras
¿Cómo se comparan grupos? Barras, boxplot
¿Cómo se relacionan dos variables? Gráfico de dispersión
¿Cómo cambia algo a través del tiempo? Gráfico de líneas

Correlación no implica causalidad. Un patrón conjunto entre dos variables (correlación) no explica por qué ocurre. Omitir este matiz puede llevar a correlaciones espurias y a conclusiones erróneas al comunicar resultados.

Sintaxis fundamental de ggplot2

ggplot2 construye gráficos por capas, agregadas con +:

ggplot(datos, aes(x = variable)) +   # Capa 1: datos y mapeo estético
  geom_histogram() +                  # Capa 2: forma geométrica
  labs(title = "Título", x = "Eje x", y = "Eje y") +  # Capa 3: etiquetas
  theme_minimal(base_size = 13)       # Capa 4: tema visual
  • aes() mapea variables del data frame a elementos visuales: x, y, fill, color.
  • El orden de las capas no altera el resultado, pero conviene mantener una secuencia legible: datos → geometría → escalas/facetas → etiquetas → tema.
  • facet_wrap(~ variable) separa el gráfico en paneles según una variable categórica, útil para comparar distribuciones entre grupos.
  • coord_flip() invierte los ejes (barras horizontales, más legibles con muchas categorías).

Transformaciones previas a la visualización

Factor ordenado, para fijar el orden de categorías en los gráficos:

datos <- datos %>%
  mutate(
    variable_tipo = factor(variable_tipo,
                            levels = c("Nivel 1", "Nivel 2", "Nivel 3"),
                            ordered = TRUE)
  )

Construcción de fechas a partir de año y mes (requiere lubridate):

meses_ordenados <- c("enero", "febrero", "marzo", ...)

datos <- datos %>%
  mutate(
    mes_num = match(mes, meses_ordenados),
    fecha = ym(paste(anio, mes_num))
  )

Resumir por grupo antes de graficar barras o líneas:

resumen <- datos %>%
  filter(anio >= 2022) %>%
  group_by(categoria) %>%
  summarise(promedio = mean(variable, na.rm = TRUE))

Reordenar categorías de mayor a menor según un valor (mejora la lectura de las barras):

fct_reorder(categoria, valor)

Ejemplos mínimos por tipo de gráfico

Histograma — distribución de una variable cuantitativa:

ggplot(datos, aes(x = variable_continua)) +
  geom_histogram(binwidth = 2, fill = "#2C7FB8", color = "white")

Barras — comparación entre categorías (usar geom_col() cuando el valor ya está resumido):

ggplot(resumen,
       aes(x = fct_reorder(categoria, promedio), y = promedio, fill = signo)) +
  geom_col() +
  coord_flip()

Boxplot — distribución comparada entre grupos:

ggplot(datos, aes(x = grupo, y = variable_continua, fill = subgrupo)) +
  geom_boxplot()

Violín — igual que el boxplot, añadiendo la densidad de probabilidad:

ggplot(datos, aes(x = grupo, y = variable_continua, fill = subgrupo)) +
  geom_violin()

Líneas — evolución de una variable en el tiempo:

ggplot(serie, aes(x = fecha, y = valor)) +
  geom_line(color = "#2008d4") +
  geom_point(color = "#0a0342")

Dispersión — relación entre dos variables continuas, con línea de tendencia:

ggplot(datos, aes(x = variable_x, y = variable_y)) +
  geom_point() +
  geom_smooth(method = lm)

Elegir el gráfico correcto

Gráfico Se usa para Fortaleza principal Limitación principal
Histograma Distribución de una variable cuantitativa continua Detecta concentración, asimetrías y valores extremos Sensible al binwidth; no sirve para variables categóricas
Barras Comparar categorías o frecuencias Fácil de interpretar; funciona bien en comunicación pública Muchas categorías generan saturación visual
Boxplot Comparar distribución entre grupos Resume mediana, cuartiles y rango; estandariza la comparación No muestra la forma completa de la densidad
Violín Comparar distribución entre grupos con densidad Añade estimación de densidad de probabilidad Menos intuitivo para audiencias no técnicas
Líneas Evolución de una variable en el tiempo Identifica tendencias y puntos de inflexión Confuso con muchas series; requiere estructura temporal continua
Dispersión Relación entre dos variables Muestra sentido de la asociación y detecta atípicos Correlación no implica causalidad

Nota: un histograma no es un gráfico de barras. El histograma agrupa datos cuantitativos continuos en rangos (sin espacio entre barras); el gráfico de barras compara categorías discretas (con espacio entre barras).

Funciones principales

Función Paquete Uso
ggplot() ggplot2 Inicia el gráfico y define datos/estética
aes() ggplot2 Mapea variables a elementos visuales
geom_histogram() ggplot2 Histograma
geom_col() ggplot2 Barras a partir de valores ya resumidos
geom_boxplot() ggplot2 Diagrama de caja
geom_violin() ggplot2 Diagrama de violín
geom_line() ggplot2 Gráfico de líneas
geom_point() ggplot2 Puntos / dispersión
geom_smooth(method = lm) ggplot2 Línea de tendencia (regresión lineal)
facet_wrap(~ variable) ggplot2 Paneles por categoría
coord_flip() ggplot2 Invierte ejes x/y
labs() ggplot2 Títulos y etiquetas de ejes/leyenda
theme_minimal() ggplot2 Tema visual limpio
fct_reorder() forcats Reordena niveles de un factor según otra variable
ym() lubridate Construye una fecha a partir de año y mes
cor() stats Calcula el coeficiente de correlación

Aplicación sobre un data frame

Flujo típico de trabajo, de la importación al gráfico:

# 1. Importar y revisar
datos <- read_excel("archivo.xlsx")
glimpse(datos)

# 2. Preparar variables (factor ordenado, fechas)
datos <- datos %>%
  mutate(
    categoria = factor(categoria, levels = c("A", "B", "C"), ordered = TRUE),
    fecha = ym(paste(anio, mes_num))
  )

# 3. Resumir si el gráfico lo requiere (barras, líneas)
resumen <- datos %>%
  group_by(categoria) %>%
  summarise(promedio = mean(variable, na.rm = TRUE))

# 4. Graficar y etiquetar
ggplot(resumen, aes(x = fct_reorder(categoria, promedio), y = promedio)) +
  geom_col() +
  coord_flip() +
  labs(title = "Título descriptivo", x = NULL, y = "Unidad de medida") +
  theme_minimal(base_size = 13)

Para evaluar la relación entre dos variables continuas, cor() entrega el coeficiente de correlación (rango -1 a 1):

cor(datos$variable_x, datos$variable_y)

Filtrar el data frame antes de calcular la correlación permite comparar subgrupos (por ejemplo, un subconjunto de países o un periodo específico):

subgrupo <- datos %>% filter(categoria %in% c("A", "B", "C"))
cor(subgrupo$variable_x, subgrupo$variable_y)

Referencia rápida

Visualizar

Quiero hacer Código
Histograma ggplot(datos, aes(x = var)) + geom_histogram(binwidth = n)
Barras a partir de resumen ggplot(datos, aes(x = cat, y = valor)) + geom_col()
Boxplot ggplot(datos, aes(x = grupo, y = var, fill = sub)) + geom_boxplot()
Violín ggplot(datos, aes(x = grupo, y = var, fill = sub)) + geom_violin()
Líneas ggplot(datos, aes(x = fecha, y = valor)) + geom_line()
Dispersión con tendencia ggplot(datos, aes(x = x, y = y)) + geom_point() + geom_smooth(method = lm)
Separar en paneles + facet_wrap(~ variable, ncol = n)
Invertir ejes (barras horizontales) + coord_flip()
Añadir títulos y etiquetas + labs(title = "...", x = "...", y = "...")
Aplicar tema limpio + theme_minimal(base_size = 13)

Transformar y preparar

Quiero hacer Código
Crear factor ordenado factor(var, levels = c(...), ordered = TRUE)
Construir fecha desde año/mes ym(paste(anio, mes_num))
Ubicar posición de un valor en un vector match(valor, vector_referencia)
Reordenar categorías según un valor fct_reorder(categoria, valor)
Filtrar filas filter(condicion)
Agregar una fila manualmente add_row(col1 = valor1, col2 = valor2)

Resumir

Quiero hacer Código
Agrupar y promediar group_by(var) %>% summarise(prom = mean(valor, na.rm = TRUE))
Ver estructura del data frame glimpse(datos)
Ver valores únicos de una variable unique(datos$var)
Ver estadísticas descriptivas summary(datos)

Comparar

Quiero hacer Código
Calcular correlación entre dos variables cor(datos$x, datos$y)
Comparar distribución entre grupos geom_boxplot() o geom_violin() con fill = grupo
Comparar categorías por magnitud geom_col() con fct_reorder()

Importar

Quiero hacer Código
Cargar librerías necesarias pacman::p_load(readxl, tidyverse, dplyr, stringr, tidyr, janitor, ggplot2, scales, forcats, lubridate, plotly)
Leer archivo Excel read_excel("archivo.xlsx")
Ver el data frame completo View(datos)
# Sintaxis que conviene recordar

ggplot(datos, aes(x = var_x, y = var_y, fill = grupo)) +
  geom_TIPO() +
  facet_wrap(~ variable) +
  coord_flip() +
  labs(title = "...", subtitle = "...", x = "...", y = "...", fill = "...") +
  theme_minimal(base_size = 13)