Dentro del conjunto de paquetes de R que facilitan la elaboración de materiales cartográficos, tmap(Tennekes 2018a) es uno más utilizados, tanto para la simple visualización de geometrías espaciales o geometrías espaciales junto con sus atributos, como para la creación de mapas en los que se superponen diferentes capas temáticas. Como veremos más adelante, estos mapas pueden presentarse en dos modos: como mapa estático y como mapa interactivo, y también en forma de animaciones de mapas. Es un paquete fácil de usar y acepta diferentes formatos de datos de entrada; debe recordarse que en R la información espacial es manejada en diferentes tipos de objetos; por ejemplos los paquetes sf para datos en formato vectorial, y terra o stars para datos raster.
Para el desarrollo de la actividad serán necesarios 3 paquetes:
sf()
: necesario para trabajar con objetos
vectoriales.
terra()
: necesario para trabajar con objetos
ráster.
tmap()
: para cartografiar los objetos
anteriores.
Para activar los paquetes tmap()
, sf()
y
terra()
primero hay que conocer si ya está instalado:
system.file(package='tmap')
## [1] "D:/Documentos/R/win-library/4.3/tmap"
system.file(package='sf')
## [1] "D:/Documentos/R/win-library/4.3/sf"
system.file(package='raster')
## [1] "D:/Documentos/R/win-library/4.3/raster"
Si ya estuvieran instalados se activan con la función
library()
.
library(tmap)
library(sf)
library(terra)
También se deben importar los ficheros necesarios para realizar los ejercicios
Además, se importará el fichero raster nz_elev.tif
.
tmap puede utilizarse elaborar un mapa sencillo, con
la función qtm()
, o utilizar un conjunto de funciones cuya
sintaxis siempre comienza por tm_shape()
, para mapas más
elaborados.
qtm()
El paquete tmap
ofrece la posibilidad de representar
gráficamente una única variable (un único atributo) de manera rápida y
sencilla, mediante la función qtm()
,
por lo que puede ser útil para explorar rápidamente cualquier
información espacial. Esta función ofrece una sintaxis similar a la de
un mapa normal, pero sólo admite un único objeto.
A continuación se cargarán cuatro objetos que se encuentran preinstalados en el propio paquete tmap.
data(World, rivers, metro, NLD_prov, NLD_muni)
Es conveniente utilizar la función str()
para conocer
cuál es la estructura interna de los objetos con los que trabajamos. Por
ejemplo, la del objeto World
es la siguiente:
str(World)
## Classes 'sf' and 'data.frame': 177 obs. of 16 variables:
## $ iso_a3 : Factor w/ 177 levels "AFG","AGO","ALB",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ name : Factor w/ 177 levels "Afghanistan",..: 1 4 2 166 6 7 5 56 8 9 ...
## $ sovereignt : Factor w/ 171 levels "Afghanistan",..: 1 4 2 159 6 7 5 52 8 9 ...
## $ continent : Factor w/ 8 levels "Africa","Antarctica",..: 3 1 4 3 8 3 2 7 6 4 ...
## $ area : Units: [km^2] num 652860 1246700 27400 71252 2736690 ...
## $ pop_est : num 28400000 12799293 3639453 4798491 40913584 ...
## $ pop_est_dens: num 43.5 10.3 132.8 67.3 15 ...
## $ economy : Factor w/ 7 levels "1. Developed region: G7",..: 7 7 6 6 5 6 6 6 2 2 ...
## $ income_grp : Factor w/ 5 levels "1. High income: OECD",..: 5 3 4 2 3 4 2 2 1 1 ...
## $ gdp_cap_est : num 784 8618 5993 38408 14027 ...
## $ life_exp : num 59.7 NA 77.3 NA 75.9 ...
## $ well_being : num 3.8 NA 5.5 NA 6.5 4.3 NA NA 7.2 7.4 ...
## $ footprint : num 0.79 NA 2.21 NA 3.14 2.23 NA NA 9.31 6.06 ...
## $ inequality : num 0.427 NA 0.165 NA 0.164 ...
## $ HPI : num 20.2 NA 36.8 NA 35.2 ...
## $ geometry :sfc_MULTIPOLYGON of length 177; first list element: List of 1
## ..$ :List of 1
## .. ..$ : num [1:69, 1:2] 61.2 62.2 63 63.2 64 ...
## ..- attr(*, "class")= chr [1:3] "XY" "MULTIPOLYGON" "sfg"
## - attr(*, "sf_column")= chr "geometry"
## - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA NA NA NA NA ...
## ..- attr(*, "names")= chr [1:15] "iso_a3" "name" "sovereignt" "continent" ...
Al mismo tiempo, podemos visualizar su contenido con la función
View()
.
View(World)
Como ya se ha señalado, la función qtm()
sólo require un
objeto (en este caso, sólo se representa su geometría -mapa base-) para
proporcionar una primera salida gráfica:
qtm(World)
Sin embargo, también permite personalizar otros elementos del mapa. Por ejemplo:
qtm(World) +
tm_layout(main.title = "Mapa del mundo")
qtm(World,
fill = "economy")
Este mapa de coropletas puede ser mejorado sustancialmente incorporando argumentos adicionales:
qtm(World,
fill="HPI",
fill.n = 9,
fill.palette = "div",
fill.title = "Happy Planet Index",
fill.id = "name",
style = "gray",
format = "World",
projection = "+proj=eck4")
Incluso es posible superponer dos mapas, uno con los paises del mundo
y otro con las ciudades más populosas. Obsérvese que, en el caso de las
ciudades, el tamaño de los símbolos es proporcional a la población
gracias al argumento symbols.size
.
qtm(World, borders = NULL) +
qtm(metro,
title = "Ciudades más populosas",
symbols.size = "pop2010",
symbols.title.size= "Metropolitan Areas",
symbols.id= "name",
format = "World")
También es posible representar gráficamente objetos puntuales, como pueden ser los volcanes de la Isla de Pascua. A continuación se realiza una representación básica de los volcanes.
qtm(volcanes)
Esta representación puede ser mejorada cambiando alguno de los elementos visuales. Por ejemplo, representando los volcanes como triángulos, cuyo tamaño dependerá de su altitud.
qtm(volcanes,
symbols.shape = 24, # Tipo de símbolo: triángulo.
symbols.size = "elevation", # Altitud proporcional a la variable altitud.
title = "Volcanes") # Título del gráfico.
📝 ACTIVIDAD DE EVALUACIÓN CONTINUA G2040_02_Geovisualizacion_tmap 1
str(NLD_prov)
Representa un mapa con las provincias de los Países Bajos.
Representa la variable pop_25_44
(porcentaje de
población entre 25 y 44 años) mediante un mapa de coropletas. Incluye el
siguiente título: “Población adulta (%)”.
tm_shape()
Aunque la función qtm()
es muy útil cuando se necesita
un apoyo cartográfico inmediado, tmap()
facilita la
visualización al operar con un gran número de funciones y permitir la
superposición de capas. Todas estas funciones tienen la misma sintaxis,
componenzando con la expresión tm_()
.
El primer elemento es siempre tm_shape()
, que
especifica el objeto (capa) básica de entrada.
De acuerdo con el nivel de sofisticación requerido, cada una de las capas puede personalizarse siguiendo dos niveles de funciones:
Funciones correspondientes a las capas del mapa
Función | Elemento | Geometría |
---|---|---|
Funciones básicas | ||
tm_polygons() | polígonos (borders and fill) | polígonos |
tm_symbols() | símbolos | puntos, polígonos, líneas |
tm_lines() | lineas | líneas |
tm_raster() | ficheros raster | raster |
tm_text() | textos | puntos, polígonos y líneas |
tm_basemap() | tile | |
tm_tiles() | tile |
Función | Elemento | Geometría |
---|---|---|
tm_borders() | polígonos (bordes) | polígonos |
tm_fill() | polígonos (relleno) | polígonos |
tm_bubbles() | círculos | puntos, polígonos y líneas |
tm_dots() | puntos | puntos, polígonos y líneas |
tm_markers() | símbolos | puntos, polígonos y líneas |
tm_square() | cuadrados | puntos, polígonos y líneas |
tm_iso() | isolíneas | líneas |
tm_rgb()/tm_rgba() | raster (RGB image) | raster |
Por ejemplo, en este caso:
tm_shape(volcanes) +
tm_symbols(shape = 24, size = "elevation") +
tm_layout(title = "volcanes")
Se interpreta como:
tm_shape()
: el objeto (mapa base), en este caso, en
formato vectorial.
tm_symbols()
: la componente estética (también
conocida como variables visuales) de esta capa.
tm_layout()
: El título del mapa.
En general, la mayoría de las variables visuales pueden asignarse de dos formas principales.
En primer lugar, aceptan un valor fijo y constante, por ejemplo,
shape = 24
, que establece la forma de los símbolos como
triángulos.
En segundo lugar, también es posible proporcionar un nombre de
variable, por ejemplo size = «elevation»
. Esto dibuja cada
punto con un tamaño basado en el atributo elevation
del
objeto volcanes
y añade automáticamente una
leyenda.
Cuando se trabaja con diferentes capas, es conveniente estructurarlas
en grupos. Un mapa puede tener varios grupos, y los
elementos formales de cada capa/grupo sólo se relacionan con la llamada
precedente en forma de tm_shape()
. Veamos a continuación
cuántas capas existen para cada grupo.
tm_shape(nz_limite) +
tm_borders(col = "black",
lwd = 1) +
tm_shape(nz_elev) +
tm_raster(title = "Altitud (m asl)",
style = "cont",
palette = "-Spectral") +
tm_shape(nz_cumbres) +
tm_symbols(size = 0.2, col = "red") +
tm_add_legend(type = "symbol", col = "red",
title = "Cimas") +
tm_scale_bar(breaks = c(0, 100, 200),
text.size = 1) +
tm_compass(position = c("right", "top"),
type = "rose",
size = 2) +
tm_credits(text = "Geog 2040") +
tm_layout(main.title = "Nueva Zelanda",
bg.color = "lightblue",
inner.margins = c(0, 0, 0, 0))
El mapa contiene 3 grupos:
El primer grupo muestra los límites de Nueva Zelanda a partir de un fichero en formato vectorial.
El segundo grupo representa un modelo digital de
elevaciones obtenido a partir de un fichero en formato ráster, en el que
la altitud se representa mediante una escala continua de colores
invertida «-Spectral»
.
El tercer grupo incluye las cimas más importantes de Nueva Zelanda mediante puntos. También se ha elaborado a partir de un objeto vectorial, en este caso con puntos.
Además, el gráfico incorpora otros elementos visuales, que ayudan a los lectores del mapa y proporcionan información auxiliar:
Función tm_layout()
: título al mapa.
Función tm_compass()
: símbolo mostrando el
norte.
Función tm_scale_bar()
: escala.
Función tm_credits()
: texto.
Por defecto, la ubicación de estos tres elementos en el mapa se
determina automáticamente. Sin embargo, puede ajustarse con el argumento
position()
. Además, es posible añadir otro tipo de leyenda
con tm_add_legend()
.
Cada mapa creado con tmap puede visualizarse de dos maneras diferentes:
El modo plot se utiliza por defecto y es la más
habitual. Este modo es compatible con casi todas las funciones de
tmap()
y se recomienda, por ejemplo, para publicaciones
científicas o impresión.
El segundo modo, view, permite crear mapas interactivos. La imagen puede ampliarse y reducirse o panoramizarse, cambiar los mosaicos de fondo o hacer clic en los objetos del mapa para obtener información adicional. Este modo tiene, sin embargo, algunas restricciones y limitaciones en comparación con «plot», por ejemplo, la leyenda no se puede personalizar completamente, y algunos elementos adicionales del mapa no son compatibles. El siguiente mapa crea un mapa con el modo “view”.
tmap_mode("view")
tm_shape(nz_elev) +
tm_graticules() +
tm_raster(title = "Elevation (m asl)",
style = "cont",
palette = "-Spectral") +
tm_shape(nz_limite) +
tm_borders(col = "black",
lwd = 1) +
tm_shape(nz_cumbres) +
tm_symbols(size = 0.2, col = "red") +
tm_add_legend(type = "symbol", col = "red",
title = "Highest peaks") +
tm_scale_bar(breaks = c(0, 100, 200), text.size = 1) +
tm_layout(main.title = "New Zealand",
bg.color = "lightblue",
inner.margins = c(0, 0, 0, 0))
Para volver al modo «plot», tenemos que utilizar de nuevo la función tmap_mode():
tmap_mode("plot")
Un mapa tiene que contar, como mínimo, con los siguientes elementos:
Título: Enunciado que sintetiza el contenido del mapa.
Fuente: Lugar de procedencia del mapa.
Trazado con la información geográfica: corresponde a la información geográfica.
Cuadrícula y coordenadas.
Escala: puede ser numérica, expresada mediante una fracción, o gráfica, siendo una representación lineal, subdividida en segmentos de igual proporción. Permite medir la distancia real directamente sobre el mapa con la ayuda de una regla, o incluso Textual.
Símbolos cartográficos: conjunto de signos convencionales y marcas que conforman la información del mapa y que deben aparecer reflejados en la leyenda.
Leyenda: explicación sintética de los símbolos del mapa.
Otra información cartográfica técnica: Sistema Geodésico de Referencia, origen de altitudes, información acerca de la cuadrícula, etc.