En muchos de los estudios que se realizan sobre el medio físico, los resultados de los trabajos realizados deben ser finalmente plasmados en un mapa. Para poder dibujar estos mapas podemos utilizar en R la librería ggmap que tienen como objetivo recrear a partir de los mapas de Google, otros nuevos mapas donde podemos hacer isocontornos, colocar textos o geolocalizar los valores de las observaciones llevadas a cabo en una zona de una variable concreta.
El script básico para obtener un mapa de estas características es el siguiente que utiliza la librería ggmap sería el siguiente:
library(ggmap)
mapa=get_map(location=c(lon=-2.658,lat=42.85),zoom=13,maptype=”satellite”)
mapa_1=ggmap(mapa)
ggsave(mapa_1,file=”file_destinacion.png”)
Lo que hacemos en este script es básicamente llamar la librería ggmap, crear el objeto mapa mediante la instrucción get_map (donde indicamos el centro de la imagen, el tipo de mapa google que queremos y el tipo de zoom a usar) y ya finalmente creamos el objeto gráfico correspondiente mediante ggmap de nuevo, objeto que salvamos mediante ggsave en un fichero en el lugar que nos convenga. Si sólo queremos ver el mapa en la pantalla de trabajo R, sólo deberemos escribr en la línea de comandos el nombre del mapa creado con ggmap y pulsar intro. El resultado del script anterior es la imagen presentada en la figura 1.
Figura 1. Creación con R de una imagen mapa tipo satélite de Googel Map mediante ggmap
Con la librería ggmap podremos llevar a cabo la construcción de diferentes tipos de mapas. En lo que sigue iremos haciendo una descripción de algunos métodos que podremos usar para realizar diferentes tipos de mapas.
Geolocalización de observaciones y coloreado según la intensidad de los valores medidos
A continuación se trascribe el conjunto de comandos que deberíamos usar para realizar este tipo de mapas que observamos en la figura 2 (es necesario bajarse previamente la librería “loa” que contiene un conjunto de datos de medidas de contaminación con metales pesados para poder realizar el ejercicio).
library(” loa”)
library(“ggmap”)
data(lat.lon.meuse,package=”loa”,envir=environment())
mean(lat.lon.meuse[,1])
[1] 50.9747
mean(lat.lon.meuse[,2])
[1] 5.743689
map <- get_map(location=c(5.743689,50.9757), zoom=13)
mapa_1=ggmap(map)
mapa_4=mapa_1 + geom_point(data=as.data.frame(lat.lon.meuse), aes(x=longitude,y=latitude,color=lead), size=3.5)+scale_color_gradientn(colours=rev(heat.colors(5)))
mapa_4
Figura 2. Geolocalización de observaciones e identificación de sus valores mediante un código de colores
Para entender este script y poderlo utilizar con nuestras observaciones es preciso primero identificar la base de datos que usamos en el ejemplo y su estructura. La base de datos que se ha usado en el ejemplo es la que proporciona la librería “loa” que rescatamos con la instrucción data(lat.lon.meuse,package=” loa”,envir=environment()) sobre una matriz de datos “lat.lon.mouse” donde en cada línea ( de sus 164 líneas) tenemos los datos de la observación de la concentración de metales pesados en punto geolocalizado con sus coordenadas longitud y latitud. (Figura 3) así como otros valores asociados.
Figura 3. Estructura de la matriz de datos lat.lon.meuse rescatada de la librería “loa”
Estos datos se localizan en el mapa y se colorean siguiendo un código de colores mediante la instrucción,
mapa_4=mapa_1 + geom_point(data=as.data.frame(lat.lon.meuse), aes(x=longitude,y=latitude,color=lead), size=3.5)+scale_color_gradientn(colours=rev(heat.colors(5)))
instrucción que nos permite observar las concentraciones medidas del metal “lead” sobre el mapa.
Si en vez de punto de forma circular queremos utilizar puntos de forma cuadrangular y representar las observaciones con un rango de niveles en vez de un código de color continuo podemos recurrir al siguiente script
library(” ggmap”)
library(“loa”)
data(lat.lon.meuse,package=”loa”,envir=environment())
map <- get_map(location=c(5.743689,50.9757), zoom=13)
mapa_1=ggmap(map)
mapa_2 <- mapa_1 + stat_summary_2d(geom = “tile”,bins = 50,data=lat.lon.meuse,
aes(x = longitude, y = latitude, z = lead), alpha=0.5)
mapa_3<- mapa_2 + scale_fill_gradient(low = “yellow”, high = “red”, guide = guide_legend(title = “LEAD”)) +xlab(“”) + ylab(“”)
mapa_3
y cuyo resultado es el que se presenta en la figura 4
Figura 4. Mapa de valores de “lead” de la base de datos lat.lon.meuse en un rango de colores
Finalmente presento un código para establecer unos isocontornos de concentración que se extrapolan en un rectángulo sobre el mapa de Google. El código sería el siguiente
library(akima)
library(ggmap)
library(loa)
data(lat.lon.meuse,package=” loa”,envir=environment())
xo=seq(min(lat.lon.meuse$longitude),max(lat.lon.meuse$longitude),length=90)
yo=seq(min(lat.lon.meuse$latitude),max(lat.lon.meuse$latitude),length=90)
a=interp(lat.lon.meuse$longitude,lat.lon.meuse$latitude,lat.lon.meuse$cadmium,xo,
yo,linear=FALSE,extrap=TRUE)
a2=interp2xyz(a)
a2=as.data.frame(a2)
map <- get_map(location=c(5.743689,50.9757), zoom=13)
mapa_1=ggmap(map)
mapa_2=mapa_1+ geom_tile(data=a2,aes(x=a2$x,y=a2$y,fill=a2$z), alpha=0.4)+scale_fill_gradientn(guide=”none”,colours=rev(heat.colors(10)))+
stat_contour(data=a2, aes(x=a2$x, y=a2$y, z=a2$z, color=..level..), geom=”path”, size=1)+scale_color_gradientn(colours=rev(heat.colors(10)))
mapa_2
con este código obtendríamos el resultado que se presenta en la figura 5
Figura 5. Mapa de isocontornos de valores de concentración de Cd extrapolados en un rectángulo
En este código hemos usado la función interp de la librería akima cuyos resultados para los concentraciones de Cd (Cadmium) se han llevado mediante la función interp2xyz a una matriz de tres columnas (x=longitud, y= latitud y z= niveles de concentración) donde se representan los valores de los niveles de concentración del metal Cd en la tercera columna denominada z.
Otros scripts con los que podréis hacer mapas como los que se presentan en la figura 6 los bajáis desde
http://e-ao.org/Apuntes/scripts_ggmap_R.txt