6  La grámatica de los gráficos ggplot2

6.0.1 Guía de Estudiante: Visualización de Datos Espaciales con ggplot2 y sf

En la sección anterior, aprendimos cómo importar datos espaciales utilizando la librería sf en R. Sin embargo, solo tocamos superficialmente el uso de ggplot2 para la visualización de estos datos. ggplot2 es una librería poderosa en R que permite crear gráficos sofisticados y altamente personalizables basados en la gramática de los gráficos. Esta guía profundizará en las motivaciones, inspiraciones y elementos de ggplot2, culminando en una visualización profesional de datos espaciales utilizando la librería sf.

6.0.1.1 Motivaciones e Inspiraciones de ggplot2

ggplot2 fue creado por Hadley Wickham y se basa en “The Grammar of Graphics” de Leland Wilkinson. La idea central detrás de ggplot2 es que un gráfico se puede construir combinando diferentes capas de datos y transformaciones de datos, lo que permite una gran flexibilidad y control sobre la visualización final.

6.0.1.2 Elementos de ggplot2

ggplot2 se compone de varios elementos básicos que se pueden combinar para crear gráficos complejos. Estos son:

  1. Datos (data): El conjunto de datos que se utilizará en el gráfico.
  2. Estética (aes): Define el mapeo de variables a propiedades visuales, como ejes, colores y formas.
  3. Geometrías (geom): Tipos de gráficos como puntos, líneas y barras.
  4. Facetas (facet): Permite crear subgráficos basados en valores de una o más variables.
  5. Estadísticas (stat): Transformaciones estadísticas de los datos que se pueden aplicar antes de graficar.
  6. Coordenadas (coord): Sistemas de coordenadas para el gráfico, como cartesiano o polar.
  7. Temas (theme): Controla la apariencia general del gráfico, como los tipos de letra y colores de fondo.

6.0.1.3 Crear un Gráfico Básico

Para comenzar, necesitamos cargar las librerías necesarias y los datos espaciales.

library(sf)
Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(ggplot2)
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.2     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ lubridate 1.9.2     ✔ tibble    3.2.1
✔ purrr     1.0.2     ✔ tidyr     1.3.0
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# Leer shapefiles
puntos <- st_read("../data/shp/cueva_cajas.shp")
Reading layer `cueva_cajas' from data source 
  `C:\Users\alex_ergostats\Documents\geo_stats_2024_nb\data\shp\cueva_cajas.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 1 feature and 2 fields
Geometry type: POINT
Dimension:     XY
Bounding box:  xmin: -79.2689 ymin: -2.823224 xmax: -79.2689 ymax: -2.823224
Geodetic CRS:  WGS 84
lineas <- st_read("../data/shp/vias_cajas.shp")
Reading layer `vias_cajas' from data source 
  `C:\Users\alex_ergostats\Documents\geo_stats_2024_nb\data\shp\vias_cajas.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 191 features and 26 fields
Geometry type: MULTILINESTRING
Dimension:     XY
Bounding box:  xmin: -79.33892 ymin: -2.896237 xmax: -79.20061 ymax: -2.769916
Geodetic CRS:  WGS 84
poligonos <- st_read("../data/shp/lagunas_cajas.shp")
Reading layer `lagunas_cajas' from data source 
  `C:\Users\alex_ergostats\Documents\geo_stats_2024_nb\data\shp\lagunas_cajas.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 220 features and 8 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: -79.32098 ymin: -2.874182 xmax: -79.23114 ymax: -2.798271
Geodetic CRS:  WGS 84

6.0.1.4 Visualización Básica

Comenzamos con una visualización básica de los polígonos.

# Graficar polígonos
ggplot() +
  geom_sf(data = poligonos) +
  coord_sf()

6.0.1.5 Agregar Colores y Personalización

Para hacer la visualización más atractiva y significativa, podemos agregar colores y personalizar otros aspectos del gráfico.

# Agregar colores y personalización
ggplot() +
  geom_sf(data = poligonos, fill = "steelblue", color = "purple") +
  geom_sf(data = puntos, color = "blue", size = 3, alpha = 0.6) +
  geom_sf(data = lineas, aes(color = highway)) +
  scale_color_manual(values = c("orange", "red")) +
  coord_sf() +
  theme_minimal() +
  labs(title = "Visualización de Datos Espaciales",
       subtitle = "Parque Nacional El Cajas",
       caption = "Fuente: Datos Geoespaciales",
       color = "Tipo de Vía")
Warning in vp$just: encuentros parciales de 'just' to 'justification'

6.0.1.6 Explicación Detallada de los Elementos Utilizados

  • Datos (data): Utilizamos los objetos poligonos, puntos y lineas que contienen nuestros datos espaciales.
  • Estética (aes): En el caso de las líneas, usamos aes(color = highway) para mapear la variable highway a los colores.
  • Geometría (geom_sf): Usamos geom_sf() para graficar los datos espaciales. fill y color en los polígonos, color y size en los puntos, y color en las líneas.
  • Coordenadas (coord_sf): Usamos coord_sf() para establecer un sistema de coordenadas espaciales.
  • Tema (theme_minimal): Aplicamos un tema minimalista para una apariencia limpia.
  • Etiquetas (labs): Añadimos títulos, subtítulos y leyendas para proporcionar contexto y mejorar la legibilidad del gráfico.

6.0.1.7 Visualización Profesional

Para lograr una visualización profesional, es importante prestar atención a los detalles y personalizar el gráfico para que sea informativo y estéticamente agradable.

# Visualización profesional
ggplot() +
  geom_sf(data = poligonos, fill = "steelblue", color = "black", lwd = 0.2) +
  geom_sf(data = puntos, color = "red", size = 3, alpha = 0.8) +
  geom_sf(data = lineas, aes(color = highway), lwd = 0.6) +
  scale_color_manual(values = c("orange", "red")) +
  coord_sf() +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5, size = 12),
    plot.caption = element_text(size = 10),
    legend.position = "bottom",
    legend.title = element_text(face = "bold"),
    axis.title = element_blank(),
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    panel.grid = element_blank()
  ) +
  labs(
    title = "Visualización de Datos Espaciales",
    subtitle = "Parque Nacional El Cajas",
    caption = "Fuente: Datos Geoespaciales",
    color = "Tipo de Vía"
  )
Warning in vp$just: encuentros parciales de 'just' to 'justification'

Como puedes ver en esta función, se emplean múltiples elementos de ggplot2 para crear un gráfico profesional. La personalización del tema y la adición de etiquetas detalladas ayudan a que el gráfico sea más informativo y estéticamente agradable.

6.0.1.8 Conclusión

En esta guía, hemos explorado en detalle cómo importar y visualizar datos espaciales utilizando ggplot2 y sf en R. Desde la lectura de shapefiles hasta la creación de visualizaciones profesionales, hemos cubierto los elementos clave de ggplot2 que te permitirán crear gráficos sofisticados y efectivos para tus análisis en estadística y econometría espacial.