Mis primeros mapas en R

En esta ocasión, vamos a realizar nuestros primeros mapas en R utilizando la librería sf (simple features).

Para ello, utilizaremos los archivos shape del continente americano y de las entidades federativas de México (estados).

Activación de la librería sf

Cuando no tenemos instalada la librería _“sf procedemos a instalarla mediante el siguiente comando:

# install.packages("sf") # Puedes obviar esta línea si ya tienes sf

Una vez instalada la librería, se activa en nuestro script.

library(sf)

Ahora llamaremos nuestro primer archivo vectorial, el del continente americano.

america <- read_sf("América.shp")

Revisamos el Sistema de Referencia de Coordenadas de nuestro objeto america

st_crs(america)
## Coordinate Reference System:
##   User input: WGS 84 
##   wkt:
## GEOGCRS["WGS 84",
##     DATUM["World Geodetic System 1984",
##         ELLIPSOID["WGS 84",6378137,298.257223563,
##             LENGTHUNIT["metre",1]]],
##     PRIMEM["Greenwich",0,
##         ANGLEUNIT["degree",0.0174532925199433]],
##     CS[ellipsoidal,2],
##         AXIS["latitude",north,
##             ORDER[1],
##             ANGLEUNIT["degree",0.0174532925199433]],
##         AXIS["longitude",east,
##             ORDER[2],
##             ANGLEUNIT["degree",0.0174532925199433]],
##     ID["EPSG",4326]]

Como puedes ver, el SRC del archivo shape es WGS 84 código EPSG: 4326.

Vamos a revisar ahora el contenido del archivo shape

america

Veamos nuestro mapa.

plot(america)

Podemos ponerle un título y sus ejes con coordenadas:

plot(america, main = "Continente americano", axes = TRUE)

Otra forma de presentar el mapa es la siguiente:

plot(st_geometry(america), axes= TRUE)

Podemos cambiar el relleno y el borde del mapa con la adición de las siguientes instrucciones:

plot(st_geometry(america), col= sf.colors(12, categorical = TRUE), 
     border = "blue", axes = TRUE)

Ahora vamos a adicionar los centroides de cada país

plot(st_geometry(america), col= sf.colors(12, categorical = TRUE), 
     border = "blue", axes = TRUE)
plot(st_geometry(st_centroid(america)), pch = 1, col = 'black', add = TRUE)

Seleccionamos un país para graficar con los ejes de latitud y longitud

Vamos a separar a Mexico a partir del objeto america.

mexico <- america[america$PAÍS=="México",]

plot(mexico)

Vamos a ponerle título:

plot(mexico, main = "México")

Ahora le ponemos sus ejes con coordenadas.

plot(st_geometry(mexico), main = "México", axes = TRUE)

Vamos a separar ahora otro país. Por ejemplo, Perú.

Obtenemos Perú a partir de america

peru <- america[america$PAÍS == "Perú",]
plot(st_geometry(peru), main = "Perú", axes = TRUE)

Vamos a presentar ahora ambos países en su contexto continental:

plot(st_geometry(america), axes=TRUE)
plot(st_geometry(mexico), col = "blue", add = TRUE) # Aparecerá México en color azul.
plot(st_geometry(peru), col = "green", add = TRUE) # Aparecerá Perú en color verde.

También podemos presentar a México y Perú en un solo mapa aislados:

dos_paises <- rbind(mexico, peru)

plot(st_geometry(dos_paises), main = "México y Perú", axes=TRUE)

Vamos a adicionar el grid a nuestro mapa:

plot(mexico, graticule = TRUE, key.pos = NULL, axes = TRUE)

plot(st_geometry(dos_paises), graticule = TRUE, axes=TRUE)

Adicionamos relleno a los polígonos

plot(st_geometry(dos_paises), graticule = TRUE, 
     col = "grey", axes=TRUE)

Probaremos ahora mapas con el paquete ggplot2.

ggplot2 es una potente librería de R que permite hacer gráficos y mapas de muy alta calidad.

Lo primero que tenemos que hacer es instalar la librería y posteriormente, activarla en nuestro script.

# install.packages("sf") # Puedes obviar esta línea si ya tienes ggplot2 
library(ggplot2)

Vamos a hacer ahora nuestros mapas:

mx <- ggplot() + geom_sf(data = mexico)
pe <- ggplot() + geom_sf(data = peru)
dos_paises_a <- ggplot() + geom_sf(data = dos_paises)

Presentemos ahora los mapas

mx

pe

dos_paises_a

Daremos ahora un poco más de formato a nuestro mapa:

ggplot() + geom_sf(data = dos_paises, aes(fill = PAÍS)) +
  guides(fill = guide_legend(title = "País"))

Cambiando el tema

ggplot() + geom_sf(data = dos_paises, aes(fill = PAÍS)) +
  guides(fill = guide_legend(title = "País")) +
  theme_dark()

Otro tema:

ggplot() + geom_sf(data = dos_paises, aes(fill = PAÍS)) +
  guides(fill = guide_legend(title = "País")) +
  theme_classic()

Un tema más:

ggplot() + geom_sf(data = dos_paises, aes(fill = PAÍS)) +
  guides(fill = guide_legend(title = "País")) +
  theme_light()

Y finalmente, probemos otro tema:

ggplot() + geom_sf(data = dos_paises, aes(fill = PAÍS)) +
  guides(fill = guide_legend(title = "País")) +
  theme_bw()

Trabajaremos ahora con la capa Estatal de México

Llamemos el archivo vectorial.

estatal <- read_sf("Estatal_WGS84.shp")
estatal

Vamos a crear cuatro mapas temáticos basados en la población total, total femenina, total masculina y económicamente activa

pobtot <- plot(estatal["POBTOT"], main="Población total")

femenina <- plot(estatal["POBFEM"], main="Población total femenina", breaks = "jenks", pal = hcl.colors(10) )

masculina <- plot(estatal["POBMAS"], main="Población total masculina")

pea_izq <- plot(estatal["PEA"], main="Población economiacamente activa", 
                key.pos = 4)

pea_der <- plot(estatal["PEA"], main="Población economiacamente activa", 
                key.pos = 2)

Mapa representando el área por entidad federativa.

Vamos a crear un campo que se llame “Area” y calcularemos el área de cada entidad federativa.

estatal$area <- st_area(estatal)

Las unidades con las que se crea el mapa son metros cuadrados. Esto se puede verificar en el último campo de la tabla de atributos:

estatal

Por lo tanto, debemos obtener el área en kilómetros cuadrados.

estatal$area <- estatal$area/1000000

Ahora hacemos un mapa graduado por área de entidad federativa

plot(estatal["area"], main = "Area por entidad federativa (Km2)")

Esperamos que estos primeros pasos sean de utilidad para crear tus primeros mapas en R.