La Gramática de Gráficos para Análisis Económico
Dpto. de Fundamentos del Análisis Económico. Universidad de Alicante
Resumir información que no se vería en los datos en bruto (hoja de cálculo)
Identificar patrones y relaciones entre variables
Comunicar hallazgos de forma efectiva a diferentes audiencias
La visualización es esencial en:
En un buen gráfico, la audiencia encuentra obvias las ideas a transmitir, sin abrumar con muchos hallazgos
ggplot2
y la Gramática de GráficosComponentes básicos:
Datos
Estéticas (aes): asocia variables a propiedades visuales (posición, longitud, área, color)
Geometrías (geom): objetos para representar datos (líneas, círculos, barras)
Escalas, Sistemas de coordenadas, Facetas (subgráficos), Contexto (títulos, leyendas), etc.
Construir gráficos como frases gramaticales
sujeto + verbo + objeto = oración
datos + geometría + estética = gráfico de ggplot2
“Por encima de todo, mostrar los datos”
ggplot()
crea un gráfico vacíoaes()
define cómo las variables se asignan a propiedades visuales+
: objeto geométrico geom_point()
Cada geom_*()
agrega un tipo diferente de capa:
Tipo | Función | Uso Habitual |
---|---|---|
Puntos | geom_point() |
Dispersión |
Líneas | geom_line() |
Evolución temporal |
Barras | geom_bar() |
Frecuencias categóricas |
Histograma | geom_histogram() |
Distribución continua |
Cajas | geom_boxplot() |
Estadísticos descriptivos |
Suavizado | geom_smooth() |
Tendencias |
Texto | geom_text() |
Etiquetas |
Para lista completa: buscar funciones que comienzan con geom_
en Ayuda
aes()
Cada aes()
es una asociación entre una señal visual y una variable:
posición: x , y |
| | forma: shape |
color: color exterior | | | relleno: fill (color interior) |
tamaño: size |
| | tipo de línea: linetype |
Algunas estéticas son solo adecuadas para variables cuantitativas o para cualitativas
Cada geom
acepta solo un subconjunto de estéticas (ver ayuda)
Regla de oro: Si quieres que algo varíe con los datos, ponlo en aes()
aes()
, se visualiza una variable con una señal visualaes()
, se establece un valor fijo de la señal visualgeom_text()
: acepta estéticas de etiquetas (variables con texto):Pero otros gráficos representan estadísticas calculadas a partir de los datos
geom_boxplot()
: datos → cuartiles, mediana
geom_smooth()
: regresión → predicción de línea de tendenciageom_bar()
y geom_histogram()
: datos → frecuencias por intervalo
La estadística predeterminada en geom_bar()
es contar casos (stat_count
)
En variables continuas, no hay categorías “naturales” para calcular frecuencias
Se tienen que definir “arbitrariamente” los intervalos
Distintas elecciones pueden revelar distinta información: p.e., no apreciamos un grupo importante de clientes con muy bajos ingresos en el último gráfico
aes()
establece qué variable asignar, la escala cómo representarla
Funciones de escala: scale_<estética>_<tipo>
. Ejemplos,
Escala | Tipos | Ejemplos |
---|---|---|
scale_color_ | identity | scale_fill_continuous |
scale_fill_ | manual | scale_color_discrete |
scale_size_ | continuous | scale_color_manual |
discrete | scale_size_discrete | |
scale_shape_ | discrete | scale_shape_discrete |
scale_linetype_ | manual | scale_shape_manual |
identity | scale_linetype_discrete | |
scale_x_ | continuous | scale_x_continuous |
scale_y_ | discrete | scale_y_discrete |
reverse | scale_y_reverse | |
log10 | scale_x_log10 | |
date | scale_x_date | |
datetime | scale_y_datetime |
Algunos argumentos son habituales en casi todas las escalas (name
, breaks
, labels
)
Otros argumentos son específicos según el tipo de variables (continua, discreta) o la escala concreta
ggplot(macro, aes(y = pais, x = pib)) +
geom_point(aes(color = desempleo)) +
scale_color_continuous(breaks = c(5, 10, 15),
labels = c("Bajo", "Medio", "Alto"),
low = "green", high = "red")
ggplot(macro, aes(y = desempleo, x = pib/1000)) +
geom_point(aes(color = norte, size = deuda, shape = norte)) +
scale_y_continuous(breaks = seq(0, 20, 5), limits = c(-5, 25)) +
scale_shape_discrete(labels = c("Norte", "Sur"),
name = "Zona de Europa")
En muchos contextos, las variables tienen un rango de valores amplio
Escala lineal vs logarítmica:
Lineal: misma distancia visual = mismo aumento absoluto → los valores pequeños quedan “aplastados” para mostrar los grandes
Logarítmica: misma distancia visual = mismo incremento relativo (%)
x = log(pib)
porque los ejes se muestran en unidades originalesUsar logs cambia la interpretación de diferencias absolutas a porcentuales
Más relevante +10% o +500 clientes (mucho en pyme, nada en Inditex)
NO para “evitar” valores extremos o distribución asimétrica
Los sub-gráficos por variables categóricas son una alternativa a aes()
para añadir variables
Facilitan comparaciones, evitando la saturación visual (ej., demasiadas líneas en un solo gráfico)
facet_wrap()
: facetas por una variable (usando “fórmula” ~
)facet_grid()
: facetas en dos dimensioneslabs()
Una buena práctica de legibilidad es dar título al gráfico, nombrar los ejes, incluir leyendas
ggplot(macro, aes(y = desempleo, x = pib/1000)) +
geom_point(aes(color = norte, size = deuda)) +
geom_smooth(method = "lm", se = FALSE) +
labs(
title = "Relación entre PIB per cápita y tasa de desempleo",
subtitle = "Países de la Unión Europea (2023)",
caption = "Fuente: Eurostat",
x = "PIB per cápita (miles de €)",
y = "Tasa de desempleo (%)",
color = "Norte",
size = "Deuda pública (% PIB)") +
scale_y_continuous(breaks = seq(0, 20, 5))
annotate()
: añade objetos geométricos NO asociados a variables:Se pueden cambiar manualmente colores (p.e., scale_fill_manual()
) o la forma (ej., scale_shape_manual()
)
PERO es preferible usar paletas predefinidas con criterios de diseño y visualización de información:
ggplot(macro, aes(x = desempleo, y = inflacion)) +
geom_point(aes(size = deuda, color = norte)) +
geom_text_repel(aes(label = pais), size = 3) +
labs(title = "Relación Desempleo-Inflación por País",
x = "Tasa de Desempleo (%)",
y = "Tasa de Inflación (%)",
size = "Deuda Pública (% PIB)",
color = "Norte de Europa")
Buenas prácticas: visualizar no es decorar datos, es comunicar insights
Una idea por gráfico
Claridad sobre ornamentación: cada elemento visual debe tener propósito
Títulos y leyendas descriptivos e informativos
Evitar demasiados colores o patrones y la sobrecarga de información
Recursos de Ayuda
Help > Cheatsheets > Data Visualization with ggplot2
Otras bibliotecas de gráficos en R
plotly
: gráficos interactivos para dashboards
gganimate
: animaciones para evolución temporal