En este cuaderno se ilustrará la cartografía temática en el departamento de Cesar, será elaborado en RStudioCloud.
Un mapa es un medio visual de comunicación en el que se recoge y luego se transmite información geográfica. Cuando se elabora un mapa se debe conocer muy bien el propósito del mapa y el usuario para elegir de forma acertada los elementos del mismo.
La cartografía temática se centra en la representación de un tema concreto de cualquier tema y se compone de dos partes diferenciadas : un capa especifica que contiene la información principal del mapa representando la variable espacial y un mapa base que se usa para ayudar a los elementos de la componente temática a transmitir mejor la información que contienen.
Un mapa de símbolos proporcionales representa variables cuantitativas a través de símbolos cuyo tamaño esta en relación con el valor a representar de dicha variable. Se debe elegir un buen tamaño para el simbolo ya que esta es la manera en la que se transmite la información al usuario
Es importante para facilitar la correcta interpretación de un mapa de símbolos graduados el mostrar en la leyenda la relación entre los distintos tamaños de los símbolos y sus valores.
Los mapas de puntos se emplean especialmente para la representación de variables que representen algún tipo de cantidad, tales como la población, el gasto medio por persona o la producción de un determinado cultivo. Estas cantidades se representan mediante la repetición de puntos, en numero proporcional a su magnitud. Tres son los aspectos que deben tenerse en cuenta a la hora de elaborar un mapa de puntos: el valor de cada punto (es decir, cuántas unidades de la variable representa cada punto), su tamaño y su posición.
Un mapa de isolíneas está formado por un conjunto de líneas, cada una de las cuales une puntos que presentan el mismo valor de la variable, son usados para la representación de información cuantitativa, en particular cuando se trata de variables continuas.El caso más típico de mapa de isolíneas son las curvas de nivel que aparecen el un mapa topográfico, indicando la elevación del terreno.
Los mapas de coropletas son utilizados muy habitualmente para representar la información geográfica en un SIG, en estos se tiene una serie de áreas definidas, cada una de las cuales posee un valor de una variable que afecta a todo el área y es el que se representa por medio de alguna variable visual.
Vamos a usar datos de las necesidades insatisfechas NBI tomados del Censo Nacional de Poblacion y vivienda del año 2018 y que son disponibles en el Geoportal del DANE y tambien podremos observar muchos mapas tematicos en el portal de DANE si das click en este link.
Estos datos estan en una tabla de excel(xlsx), pero contiene información de todos los municipios de Colombia así que antes de trabajar con ellos los depuramos dejando solamente los pertenecientes al departamento de Cesar y cambiamos los nombres de las columnas para lograr que la lectura del archivo en R sea sencilla.
Para empezar limpiaremos la memoria.
rm(list=ls())
Con el siguiente código instalaremossolamente los paquetes necesarios pero que aun no estan instalados.
list.of.packages <- c("tidyverse", "rgeos", "sf", "raster", "cartography", "SpatialPosition")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
Se procede a cargar las librerias
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.0 v purrr 0.3.3
## v tibble 2.1.3 v dplyr 0.8.4
## v tidyr 1.0.2 v stringr 1.4.0
## v readr 1.3.1 v forcats 0.5.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(ggplot2)
library(knitr)
library(readxl)
library(rgeos)
## Loading required package: sp
## rgeos version: 0.5-2, (SVN revision 621)
## GEOS runtime version: 3.6.1-CAPI-1.10.1
## Linking to sp version: 1.4-1
## Polygon checking: TRUE
library(raster)
##
## Attaching package: 'raster'
## The following object is masked from 'package:dplyr':
##
## select
## The following object is masked from 'package:tidyr':
##
## extract
library(sf)
## Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
library(cartography)
library(SpatialPosition)
Con la libreria read_excel, R puede acceder a archivos que estan en excel en el computador.
nbi <- read_excel("C:/Users/Usuario/Documents/sexta matricula/Geomatica/CESAR/nbi1_Cesar.xlsx")
Ya conocemos la función head, que nos permite visualizar las seis primeras filas del archivo
head(nbi)
Vamos a usar la función pipe para conocer en que municipios se encuentra la mayor y la menor proporción de miseria en el departamento de Cesar.
nbi %>%
slice(which.max(Miseria)) -> max_mis
max_mis
nbi %>%
slice(which.min(Miseria)) -> min_mis
min_mis
Pueblo Bello resulta ser el Municipio con la tasa de miseria mas alta,este está ubicado e la Sierra Nevada de Santa Marta y la gran mayoria de su población son indígenas Arhuacos,por lo contario San Alberto presenta la mas baja tasa de miseria, este municipio colinda con Santander.
Con la funcion arrange se ordenan las filas de un data frame en función de los valores de una o más columnas. En la siguiente linea de código ordenaremos en forma descendente los datos segun la tasa de miseria
nbi %>%
arrange(desc(Miseria)) -> desc_mis
desc_mis
Vamos a usar lalibreria sf para leer un archivo .shp ,con mas información del departamento del Cesar
munic <- st_read("C:/Users/Usuario/Documents/20_CESAR/ADMINISTRATIVO/MGN_MPIO_POLITICO.shp")
## Reading layer `MGN_MPIO_POLITICO' from data source `C:\Users\Usuario\Documents\20_CESAR\ADMINISTRATIVO\MGN_MPIO_POLITICO.shp' using driver `ESRI Shapefile'
## Simple feature collection with 25 features and 9 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -74.13916 ymin: 7.67435 xmax: -72.88575 ymax: 10.86767
## CRS: 4326
munic
Revisamos el atributo
head(munic$MPIO_NAREA)
## [1] 877.6508 637.9028 586.2015 1376.4446 1114.4804 915.1712
Con el siguiente codigo ordenamos en forma descente los municipios por su área. Encontrando que Valledupar, su capital,es el municipio que posee la mayor extensión.
munic %>%
arrange(desc(MPIO_NAREA)) -> desc_area
desc_area
munic1 <- separate(munic, MPIO_CCDGO, c("MPIO", "CCDGO"),sep = "20")
Vamos a relaizarun join y primeros nos aseguramos que se tengan las mismas caracteristicas.
class(munic1$CCDGO)
## [1] "character"
class(nbi$CODIGO)
## [1] "character"
nbi_munic = left_join(munic1, nbi, by= c("CCDGO"="CODIGO"))
nbi_munic
Con la función dplyr::select se pueden seleccionar las columnas que se deseen del data frame.
nbi_munic %>%
dplyr::select(MPIO_CNMBR, CCDGO, Miseria) -> check_nbi_munic
head(check_nbi_munic)
Reproyectaremos los municipios del departamento.
nbi_munic_new <- st_transform(nbi_munic, crs = 3116)
Usaremos el paquete cartography package para obtener mapas temáticos. Este paquete usa la funcionalidades sf o sp
###7.1 OSM y simbolos proporcionales
#install.packages("osmdata")
library(osmdata)
## Data (c) OpenStreetMap contributors, ODbL 1.0. https://www.openstreetmap.org/copyright
mun.osm <- getTiles(
x = nbi_munic_new,
type = "OpenStreetMap",
zoom = 6,
cachedir = TRUE,
crop = FALSE
)
# establecer margenes
opar <- par(mar = c(0,0,2,0))
# plotear osm
tilesLayer(x = mun.osm)
# plotear losbordes de los municipios
plot(st_geometry(nbi_munic_new), col = NA, border = "red", add=TRUE)
# plotear la tasa de miseria en Cesar
propSymbolsLayer(
x = nbi_munic_new,
var = "Miseria",
inches = 0.10,
col = "lightblue",
legend.pos = "topright",
legend.title.txt = "Misery"
)
# uso de layout
layoutLayer(title = " Tasa de Miseria en Cesar",
sources = "Fuente: DANE, 2018\n© OpenStreetMap",
author = " Angelica Martinez ",
frame = TRUE, north = FALSE, tabtitle = TRUE)
# flecha indicadora de norte
north(pos = "topleft")
Nosotros ya hemos visto en las tablas que en Pueblo Bello hay una alta tasa de miseria,y esta información la reflejmos ahora en el mapa ya que el punto que tiene el diametro mas grande es el que está ubicado en este municipio.
###7.2 MAPA DE COROPLETAS
Los mapas de corpletas varian de acuerdo a una variable cuantitativa, en ese caso seguimos observando la variable de Miseria. Para ello usamos la funcion choroLayer(), en la que laintensidad del color es la que nos va a mostrar la intensidad de la caracteristica.
# Margenes
opar <- par(mar = c(0,0,1.2,0))
# color del background
par(bg="grey90")
# plotear municipios
plot(st_geometry(nbi_munic_new), col = NA, border = NA, bg = "#aadaff")
# plotear tasa de Hacinamiento
choroLayer(
x = nbi_munic_new,
var = "Hacinamiento",
method = "geom",
nclass=6,
col = carto.pal(pal1 = "green.pal", n1 = 6),
border = "white",
lwd = 0.5,
legend.pos = "topleft",
legend.title.txt = "Miseria",
add = TRUE
)
# layout
layoutLayer(title = "Distribución del hacinamiento en Cesar",
sources = "Fuente: DANE, 2018",
author = "Angelica Mrtinez",
frame = TRUE, north = TRUE, tabtitle = TRUE, col="black")
# north arrow
#north(pos = "topright")
Podemos ver que el municipio de Pueblo Bello que es elque presenta la tasa mas alta de hacinamiento esta en color verde oscuro,mientras Aguachica esta en color muy tenue mostrando que la tasa de hacinamieno alli es menor.
nbi_munic_2 <- dplyr::mutate(nbi_munic_new, poverty = ifelse(Miseria > 20, "Extreme", ifelse(Hacinamiento > 5, "High", "Intermediate")))
head(nbi_munic_2)
library(sf)
library(cartography)
# establecer margenes
opar <- par(mar = c(0,0,1.2,0))
# Plotear los municipios
plot(st_geometry(nbi_munic_2), col="antiquewhite", border="grey", bg = "aliceblue",
lwd = 0.5)
# Plotear con coropletas
propSymbolsTypoLayer(
x = nbi_munic_2,
var = "NBI",
inches = 0.2,
symbols = "square",
border = "white",
lwd = .5,
legend.var.pos = "topleftt",
legend.var.title.txt = "Miseria",
var2 = "poverty",
legend.var2.values.order = c("Extreme","Intermediate", "High" ),
col = carto.pal(pal1 = "blue.pal", n1 = 3),
legend.var2.pos = "topright",
legend.var2.title.txt = "Nivel miseria"
)
# layout
layoutLayer(title="Distribution NBI en Cesar",
author = "Angélica Martinez",
sources = "Source: DANE, 2018",
scale = 1, tabtitle = TRUE, frame = TRUE)
# north arrow
north(pos = "topleft")
par(opar)
library(sf)
library(cartography)
# Estableciendo margenes
opar <- par(mar = c(0,0,1.2,0))
# estableciendo color de background
par(bg="grey25")
# plot municipios
plot(st_geometry(nbi_munic_2), col = "orange", border = "darkseagreen4",
bg = "grey75", lwd = 0.5)
# plot NBI
choroLayer(
x = nbi_munic_new,
var = "NBI",
method = "geom",
nclass=5,
col = carto.pal(pal1 = "orange.pal", n1 = 5),
border = "white",
lwd = 0.5,
legend.pos = "topright",
legend.title.txt = "NBI",
add = TRUE
)
# plot labels
labelLayer(
x = nbi_munic_2,
txt = "MUNICIPIO",
col= "white",
cex = 0.4,
font = 4,
halo = TRUE,
bg = "grey25",
r = 0.1,
overlap = FALSE,
show.lines = FALSE
)
# map layout
layoutLayer(
title = "Municipios de Cesar",
sources = "Source: DANE, 2018",
author = "Angelica Martinez",
frame = TRUE,
north = TRUE,
tabtitle = TRUE,
theme = "taupe.pal"
)
par(opar)
cultivos2018 <- read_excel("C:/Users/Usuario/Documents/sexta matricula/Geomatica/EVA_CESAR2018.xlsx")
head(cultivos2018)
En el departamento del Cesar uno de los cultivos mas importantes es el café.
cultivos2018 %>%
filter(CULTIVO == "CAFE") -> cafe2018
cafe2018
cafe_2018 <-separate(cafe2018, COD_MUN, c("COD", "MUN"),sep = "20")
cafe2018$TEMP <- as.character(cafe_2018$MUN)
#cafe2018$MPIO_CCDGO <- as.factor(paste(0, cafe2018$TEMP, sep=""))
cafe_2018
munic1
class(munic1$CCDGO)
## [1] "character"
cafe_munic = left_join(munic1, cafe_2018, by= c("CCDGO"="MUN"))
cafe_munic
rep_cafe <- st_transform(cafe_munic, crs = 3116)
# set margins
opar <- par(mar = c(0,0,1.2,0))
# plot municipalities (only the backgroung color is plotted)
plot(st_geometry(rep_cafe), col = NA, border = "black", bg = "grey75")
# plot isopleth map
smoothLayer(
x = rep_cafe,
var = 'Produccion',
typefct = "exponential",
span = 25000,
beta = 2,
nclass = 3,
col = carto.pal(pal1 = 'orange.pal', n1 = 10),
border = "grey",
lwd = 0.1,
mask = rep_cafe,
legend.values.rnd = -3,
legend.title.txt = "Production",
legend.pos = "topright",
add=TRUE)
# annotation on the map
text(x = 65000, y = 120000, cex = 0.6, adj = 0, font = 3, labels =
"Distance function:\n- type = exponential\n- beta = 2\n- span = 20 km")
# layout
layoutLayer(title = "Produccion de café en Cesar",
sources = "Fuente: DANE y MADR, 2018",
author = "Angelica Martinez",
frame = FALSE, north = FALSE, tabtitle = TRUE,
theme = "green.pal")
# north arrow
north(pos = "topleft")
### 8 Guardar un mapa en nuestro equipo
png("C:/Users/Usuario/Documents/sexta matricula/Geomatica/cafe7_2018.png", width = 2048, height = 1526)
# establecer margenes
opar <- par(mar = c(0,0,5,5))
# Plotear municipios
plot(st_geometry(rep_cafe), col="turquoise", border="darkseagreen4",
bg = "white", lwd = 0.6)
# Plotear simbolos con coropletas
propSymbolsChoroLayer(x = rep_cafe, var = "Produccion", var2 = "Rendimiento",
col = carto.pal(pal1 = "wine.pal", n1 = 3,
pal2 = "pink.pal", n2 = 3),
inches = 0.8, method = "q6",
border = "grey50", lwd = 1,
legend.title.cex = 1.5,
legend.values.cex = 1.0,
legend.var.pos = "right",
legend.var2.pos = "left",
legend.var2.values.rnd = 2,
legend.var2.title.txt = "Rendimiento\n(Ton/Ha)",
legend.var.title.txt = "Produccion Café en 2018",
legend.var.style = "e")
# plot labels
labelLayer(
x = rep_cafe,
txt = "MPIO_CNMBR",
col= "white",
cex = 1.0,
font = 4,
halo = FALSE,
bg = "white",
r = 0.1,
overlap = FALSE,
show.lines = FALSE)
# layout
layoutLayer(title="Produccion de café en Cesar, 2018",
author = "Angelica Martinez",
sources = "Sources: MADR & DANE, 2018",
scale = 100, tabtitle = FALSE, frame = TRUE)
# flecha del norte
north(pos = "topleft")
#
title(main="Produccion Café en Cesar, 2018", cex.main=3,
sub= "Source: MADR & DANE, 2018", cex.sub=2)
#
graticule = TRUE
#
par(opar)
### cerrar el ploteo
#
dev.off()
## png
## 2
Entonces se puede grabar el mapa y luego con el suguiente comando traerlo al cuaderno de RStudio.
include_graphics("C:/Users/Usuario/Documents/sexta matricula/Geomatica/cafe7_2018.png")
sessionInfo()
## R version 3.6.3 (2020-02-29)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 18362)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=Spanish_Colombia.1252 LC_CTYPE=Spanish_Colombia.1252
## [3] LC_MONETARY=Spanish_Colombia.1252 LC_NUMERIC=C
## [5] LC_TIME=Spanish_Colombia.1252
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] osmdata_0.1.3 SpatialPosition_2.0.1 cartography_2.4.1
## [4] sf_0.9-2 raster_3.0-12 rgeos_0.5-2
## [7] sp_1.4-1 readxl_1.3.1 knitr_1.28
## [10] forcats_0.5.0 stringr_1.4.0 dplyr_0.8.4
## [13] purrr_0.3.3 readr_1.3.1 tidyr_1.0.2
## [16] tibble_2.1.3 ggplot2_3.3.0 tidyverse_1.3.0
##
## loaded via a namespace (and not attached):
## [1] Rcpp_1.0.3 lubridate_1.7.4 lattice_0.20-38 png_0.1-7
## [5] class_7.3-15 assertthat_0.2.1 digest_0.6.25 R6_2.4.1
## [9] cellranger_1.1.0 backports_1.1.5 reprex_0.3.0 evaluate_0.14
## [13] e1071_1.7-3 httr_1.4.1 pillar_1.4.3 rlang_0.4.5
## [17] curl_4.3 rstudioapi_0.11 rmarkdown_2.1 rgdal_1.4-8
## [21] munsell_0.5.0 broom_0.5.5 compiler_3.6.3 modelr_0.1.6
## [25] xfun_0.12 pkgconfig_2.0.3 htmltools_0.4.0 tidyselect_1.0.0
## [29] codetools_0.2-16 fansi_0.4.1 crayon_1.3.4 dbplyr_1.4.2
## [33] withr_2.1.2 grid_3.6.3 lwgeom_0.2-3 nlme_3.1-144
## [37] jsonlite_1.6.1 gtable_0.3.0 lifecycle_0.2.0 DBI_1.1.0
## [41] magrittr_1.5 units_0.6-5 scales_1.1.0 KernSmooth_2.23-16
## [45] cli_2.0.2 stringi_1.4.6 fs_1.3.2 xml2_1.2.5
## [49] ellipsis_0.3.0 generics_0.0.2 vctrs_0.2.3 tools_3.6.3
## [53] glue_1.3.1 hms_0.5.3 slippymath_0.3.1 yaml_2.2.1
## [57] colorspace_1.4-1 isoband_0.2.0 classInt_0.4-2 rvest_0.3.5
## [61] haven_2.2.0