En el ecosistema R existen numerosas librerías dedicadas a la representación espacial de datos (sf, leaflet, mapbox…). Ya en otros artículos os mostramos como emplear estos paquetes para la creación de mapas de diversas temáticas:
- Creación de visores de mapas web de Leaflet en R.
- Creación de mapas con Mapbox y R.
- Mapas de coropletas, cartogramas y mapas animados con R.
- Creación de mapas con R y ggplot2.
Hoy os vamos a hablar de la librería cartographr, una opción pensada para simplificar la creación de mapas, con una curva de aprendizaje mucho menor que la de otros paquetes.
Formar mapas con datos de OpenStreetMap suele ser complejo y algo técnico. La idea principal que encontramos detrás de cartographr es simplificar este proceso al conectar las librerías de R osmdata (paquete que permite descargar datos vectoriales de OpenStreetMap) y ggplot2, permitiendo generar visualizaciones claras y atractivas en pocas líneas de código. Y además, ¡listas para imprimir!

En este post vamos a mostrar los pasos para generar rápidamente varios mapas con distintas estéticas de la ciudad de Donostia-San Sebastián (País Vasco – España).
Instalamos y cargamos las librerías
El primer paso es instalar (si no se ha hecho ya) y cargar las librerías que necesitamos para empezar a trabajar:
# Instalación y carga de librerías
install.packages("sf", "cartographr")
library(sf)
library(cartographr)
Además de cartographr, también cargamos la librería por excelencia para trabajar con datos espaciales en R: sf. Se puede leer más sobre la librería sf en el artículo R y GIS: Qué es R y su relación con los GIS.
Definimos el tamaño de salida de nuestros mapas
La librería incluye la función set_output_size(), que nos permite establecer el formato de salida de los mapas. A través de su parámetro size podemos escoger un tamaño de papel estándar o unas dimensiones personalizadas (ancho, alto).
- Los tamaños estándar pueden ser «A0», «A1», «A2», «A3», «A4», «A5», «A6», «small_poster», «medium_poster» o «large_poster»
En nuestro caso, vamos a definir un tamaño A4 de salida:
# Definimos tamaño de A4 set_output_size(size = "A4") # Si queremos unas dimensiones personalizas (p.e: 300 x 300) lo haríamos así set_output_size(c(300,300))
Obtenemos datos de OpenSteetMap
Con la función get_osmdata() podemos descargar directamente datos de OpenStreetMap de la zona que deseemos. Esta función descarga los datos de OpenStreetMap usando por debajo la librería osmdata y los devuelve listos para trabajar en cartographr usando ggplot2.
Todos los datos a los que accedemos mediante cartographr y, por tanto, osmdata, están sujetos a la licencia de OpenStreetMap, la Open Database Licence. Es importante saber que los datos y productos derivados también deben contar con esta misma licencia.
Usando get_osmdata() tenemos tres formas de obtener los datos:
1. Mediante las coordenadas de un punto central en el sistema de referencia WGS84 y una distancia en la dirección X y en la dirección Y del área a recuperar en metros. Para ello usamos los argumento lat, lon, x_distance e y_distance:
# Mediante punto central osm_donostia_pto <- get_osmdata( lat = 43.2952, lon = -1.987877, x_distance = 5000, y_distance = 5000, quiet = FALSE )
2. Proporcionando las coordenadas del bounding box (coordenadas del cuadro delimitador del área de interés). Para ello usamos el argumento bbox:
# Mediante bounding box bbox_donostia <- st_bbox(c( xmin = -2.02, ymin = 43.30, xmax = -1.94, ymax = 43.34 ), crs = 4326) osm_donosti_bbox <- get_osmdata( bbox = bbox_donostia, quiet = FALSE )
Podemos usar la función st_bbox() de sf para calcular o definir la caja rectangular que delimita el área de interés que queremos obtener.
3. O a través de un objeto de la clase sf de la librería sf. Para ello usamos el argumento sf:
# Mediante objeto sf
donostia_sf <- st_read("https://www.donostia.eus/datosabiertos/recursos/mapa-limite_municipal/udaleremua.json")
donostia_sf_4326 <- st_transform(donostia_sf, 4326)
osm_donostia_sf <- get_osmdata(
sf = donostia_sf_4326,
quiet = FALSE
)
En este último caso, hemos creado un objeto sf con la función st_read() leyendo directamente un fichero geojson en línea de los límites municipales disponible en el catálogo de datos abiertos del Ayuntamiento de San Sebastián. Además, lo hemos reproyectado al sistema de referencia que usa nuestra librería (WGS84) con st_transform().
Por otro lado, recomendamos usar el argumento quiet = FALSE para que nos indique el estado de la descarga de los datos. Hay que ser pacientes ya que si solicitamos áreas muy grandes, la descarga de información se puede alargar varios minutos.
Visualizamos los mapas
Una vez que tenemos los datos descargados, ya podemos crear nuestros mapas. Para ello, debemos emplear la función plot_map(). Esta función espera recibir dos argumentos:
- osm: los datos descargados de OpenStreetMaps
- palettte: una paleta de colores para representar el mapa. Las opciones disponibles son «alphabet», «arctic», «autumn», «autumn-muted», «bw», «desert», «evening», «gray», «iberia», «imhof», «lines», «metropolitan», «midnight», «minimal», «swiss», «tropical» o incluso podemos crear nuestra propia paleta de colores.
El aspecto de las paletas es el siguiente:
Vamos a generar tres visualizaciones con distintas paletas usando los datos obtenidos.
# Mapa generado con un punto central mapa_donostia_pto <-plot_map(osm = osm_donostia_pto, palette = "autumn") mapa_donostia_pto
# Mapa generado con bounding box mapa_donostia_bbox <-plot_map(osm = osm_donosti_bbox, palette = "serene") mapa_donostia_bbox
Incluso podemos usar funciones de ggplot para personalizar más nuestros mapas. Por ejemplo, para añadir un título:
# Mapa con objeto sf y con título mapa_donosti_sf <- plot_map(osm = osm_donosti_sf, palette = "iberia") mapa_donosti_sf <-ggplot2::labs(mapa_donosti_sf, title = "SAN SEBASTIÁN") mapa_donosti_sf
Imprimimos nuestros resultados
Por último, si queremos imprimir nuestros resultados en un documento PDF podemos usar la función save_map() pasándole los siguientes argumentos:
- plot: el propio mapa que queremos imprimir
- filename: la ruta dónde almacenar el fichero
# Almacenamos los mapas como ficheros PDFs en nuestro equipo save_map(plot = mapa_donostia_pto, filename="donostia_autumn_A4.pdf") save_map(plot = mapa_donostia_bbox, filename="donostia_serene_A4.pdf") save_map(plot = mapa_donosti_sf, filename="donostia_iberia_A4.pdf")
En definitiva, cartographr facilita enormemente la creación de mapas atractivos y funcionales en R, evitando la necesidad de realizar consultas complejas a OpenStreetMap. Con funciones como get_osmdata(), plot_map() y save_map() cualquier usuario puede transformar datos espaciales en visualizaciones claras y profesionales, listas para su presentación. Esta librería demuestra que la cartografía en R puede ser rápida, accesible y visualmente impactante.

Tutora del curso de R y SIG. Grado en Ingeniería en tecnologías de la información y en Geomática y topografía. Máster en Ingeniería y geoinformación. Echa un vistazo a todos nuestros cursos de SIG online.




Excelente artículo. Gracias por compartir este contenido. Sin duda alguna muy útil.
Hola, gracias por compartir, acá dejo un enlace a un plug-in que usa cartographr,
https://github.com/AlfCano/rk.cartographr
Saludos
¡Qué útil! Muchas gracias por tu aporte Alfonso.