Erika Aparicio
19/05/20

Cartografía temática

1. Introduccción.

El departamento de Meta está integrado por 29 municipios, esta entidad territorial tiene una extensión de 85.635 kms convirtiéndose en el cuarto departamento más grande del país, es de tradición agrícola y ganadera, pero posee una estructura diversificada en los sectores de servicios. En cuanto su población, el departamento contaba para el año 2018 con 919,129 habitantes, distribuidos en sus municipios, según datos del DANE. Sin embargo, en el siguiente cuaderno se quizo evaluar el indice NBI (Necesidades Básicas insatisfechas) que presenta cada municipio del departamento, el cual mediante algunos indicadores como: viviendas inadeacuadas, viviendas con hacinamiento crítico, vivienda con servicios inadecuados, vivienda con alta dependencia económica y viviendas con niños con edad escolar que no asisten a la escula, pretende observar si las necesidades básicas de la población son cubiertas, de no ser así, es decir, que no alcancen un umbral mínimo fijado, la población es considerada como pobre, de igual modo, en cuanto al sector agropecuario del departamento se observó la producción y rendimiento de cultivos como el maiz y la palma de aceite para el año 2018. Estos datos, se representaron mediante el uso de diferentes tipos de mapas temáticos.

2. Cartografía temática.

De acuerdo con Amanda Briney. Los mapas temáticos son aquellos que enfatizan un tema, como la distribución promedio de lluvia en un área o la densidad de población en un municipio. Son diferentes de los mapas de referencia generales porque no solo muestran características naturales y creadas por el hombre, como ríos, ciudades, subdivisiones políticas y carreteras, su bien estos elementos aparecen en un mapa temático, son puntos de referencia para mejorar la comprensión del tema y el propósito del mapa.
Según Briney, el factor más importante a tener en cuenta al diseñar mapas temáticos es la audiencia del mapa, es decir, a quien va dirigido, esto ayuda a determinar qué elementos deben incluirse en el mapa como puntos de referencia además del tema. Un mapa que se está haciendo para un politólogo, por ejemplo, necesitaría mostrar límites políticos, mientras que uno para un biólogo podría necesitar contornos que muestren la elevación ”.
Las fuentes de datos de los mapas temáticos son muy importantes, enfatiza Briney. “Los cartógrafos deben encontrar fuentes de información precisas, recientes y confiables sobre una amplia gama de temas, desde características ambientales hasta datos demográficos, para hacer los mejores mapas posibles”.
Igualmente, Briney resume varias técnicas de mapeo temático que se usan con mayor frecuencia:

2.1 Mapa de coropleta

Este mapa retrata datos cuantitativos como un color y puede mostrar la densidad, el porcentaje, el valor promedio o la cantidad de un evento dentro de un área geográfica. Los colores secuenciales representan valores de datos positivos o negativos crecientes o decrecientes. Normalmente, cada color también representa un rango de valores

2.2 Mapa de símbolos proporcionales o graduados

Mapa que se usa en otro tipo de mapa para representar datos asociados con ubicaciones, como ciudades. Los datos se muestran en estos mapas con símbolos de tamaño proporcional para mostrar las diferencias en las ocurrencias. Los círculos se usan con mayor frecuencia, pero los cuadrados y otras formas geométricas también son adecuados. La forma más común de cambiar el tamaño de estos símbolos es hacer que sus áreas sean proporcionales a los valores que se representarán mediante el software de mapeo o dibujo.

2.3 Mapa isarítmico o de contorno

Mapa que usa isolinas para representar valores continuos como los niveles de precipitación. Estos mapas también pueden mostrar valores tridimensionales, como la elevación, en mapas topográficos. En general, los datos para mapas isarítmicos se recopilan a través de puntos medibles (por ejemplo, estaciones meteorológicas) o se recopilan por área (por ejemplo, toneladas de maíz por acre por condado). Los mapas isarítmicos también siguen la regla básica de que hay lados altos y bajos en relación con la isolina. Por ejemplo, en elevación, si la isolina es de 500 pies, entonces un lado debe ser más alto que 500 pies y un lado debe ser más bajo.

2.4 Mapa de puntos

Mapa que utiliza puntos para mostrar la presencia de un tema y mostrar un patrón espacial. Un punto puede representar una unidad o varias, dependiendo de lo que se esté representando.

3. Datos

Para el ejercicio se utilizará los datos sobre Necesidades Básicas Insatisfechas(NBI) del Censo Nacional de Población y Vivienda 2018 que están disponibles en el Geoportal DANE.
Los mapas temáticos son útiles para transmitir información demográfica. Si desea explorar varios mapas temáticos de DANE dirijase Aqui
Tener en cuanta que una vez descargado el archivo NBI, en formato .xlsx, se utilizó Excel para eliminar datos de municipios no ubicados dentro del Departamento de Meta. También se “limpio” los datos, es decir, se elimino filas con imágenes institucionales o sin información. Manteniendo las columnas que se refieren a todo el municipio (es decir, se elimino las columnas correspondientes a “cabecera” y “zona rural”). Los datos resultantes se guardaron NBI_Meta.xlsx.

4. Preparación

Limpiemos la memoria:
rm(list=ls())
Ahora, es necesario instalar las bibliotecas que se necesitan.
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)
Luego, se debe cargar las bibliotecas.
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.5
## 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(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(sf)
## Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
library(raster)
## 
## Attaching package: 'raster'
## The following object is masked from 'package:dplyr':
## 
##     select
## The following object is masked from 'package:tidyr':
## 
##     extract
library(cartography)

5. Leer datos del NBI

Leamos el archivo csv con “estadisticas municipales agropecuarias” para Meta.
nbi <- read_excel("C:/Users/oaparicio15/Desktop/QGIS/ColombiaDatos/NBI_META.xlsx")

Veamos cuáles son los atributos de los datos.

head(nbi)
Veamos cuál es el municipio con el mayor porcentaje de NBI:
nbi %>% 
    slice(which.max(NBI)) -> max_nbi

max_nbi
Ahora, Veamos cuál es el municipio con el porcentaje más bajo de NBI:
nbi %>% 
    slice(which.min(NBI)) -> min_nbi

min_nbi
Ordenemos los municipios por NBI en orden descendente:
nbi %>% 
  arrange(desc(NBI))  -> desc_nbi

desc_nbi

6. Unir datos de NBI a municipios

, leamos el archivo los municipios de Meta.
Leamos los datos usando la biblioteca sf:
munic <- st_read("C:/Users/oaparicio15/Desktop/QGIS/ColombiaDatos/50_META/ADMINISTRATIVO/MGN_MPIO_POLITICO.shp")
## Reading layer `MGN_MPIO_POLITICO' from data source `C:\Users\oaparicio15\Desktop\QGIS\ColombiaDatos\50_META\ADMINISTRATIVO\MGN_MPIO_POLITICO.shp' using driver `ESRI Shapefile'
## Simple feature collection with 29 features and 9 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -74.89921 ymin: 1.604238 xmax: -71.07753 ymax: 4.899101
## epsg (SRID):    4326
## proj4string:    +proj=longlat +datum=WGS84 +no_defs
Revicemos qué hay dentro del atributo MPIO_CCDGO:
head(munic$MPIO_CNMBR)
## [1] VILLAVICENCIO     ACACÍAS           BARRANCA DE UPIA  CABUYARO         
## [5] CASTILLA LA NUEVA CUBARRAL         
## 29 Levels: ACACÍAS BARRANCA DE UPIA CABUYARO CASTILLA LA NUEVA ... VISTAHERMOSA
Ahora, para unir los municipios y los datos del NBI Podemos usar la función left_join
nbi_munic = left_join(munic, nbi, by=c("MPIO_CCDGO"="CODIGO"))
## Warning: Column `MPIO_CCDGO`/`CODIGO` joining factor and character vector,
## coercing into character vector
nbi_munic %>%
  dplyr::select(MUNICIPIO, MPIO_CCDGO, NBI)  ->  check_nbi_munic

head(check_nbi_munic)
Tenga en cuenta que Cabuyaro tiene NBI = 17.25, un valor que puede verificarse con los datos de NBI ordenados previamente obtenidos.
Ahora, reproyectemos los municipios
st_transform sirve para hacer una transformación de coordenadas, dado que los datos estan en coordenadas geográficas (SRID:4326) y la libreria cartography acepta los datos en coordenadas planas, en este caso, se utiliza el sistema de referencia de coordenadas 3116
nbi_munic_new <- st_transform(nbi_munic, crs = 3116)

7. Ejemplos de mapas temáticos.

Ahora se utilizará el paquete de cartografía que tiene como objetivo obtener mapas temáticos con la calidad visual de aquellos construidos con un software clásico de mapeo o SIG. Sus funciones son intuitivas para los usuarios y aseguran la compatibilidad con los flujos de trabajo comunes de R.
La biblioteca de cartografía usa objetos sf o sp para producir gráficos base. Como la mayoría de los componentes internos del paquete se basan en funcionalidades sf, el formato preferido para los objetos espaciales es sf.

7.1 Simbolos proporcionales usando el mapa base de OpenStreetMap

Las funciones getTiles () y tilesLayer () descargan y muestran los mosaicos de OpenStreetMap. Tenga cuidado de citar la fuente de los azulejos adecuadamente.
propSymbolsLayer () muestra símbolos con áreas proporcionales a una variable cuantitativa (por ejemplo, NBI). Hay varios símbolos disponibles (círculos, cuadrados, barras). El argumento pulgadas se utiliza para personalizar los tamaños de los símbolos.
mun.osm <- getTiles(
x = nbi_munic_new, 
type = "OpenStreetMap", 
zoom = 8,
cachedir = TRUE,
crop = FALSE
)
# establecer márgenes
opar <- par(mar = c(0,0,1.2,0))
# plot osm tiles
tilesLayer(x = mun.osm)
# Trazao de los municipios (only borders are plotted)
plot(st_geometry(nbi_munic_new), col = NA, border = "black", add=TRUE)
# plot NBI
propSymbolsLayer(
  x = nbi_munic_new, 
  var = "NBI", 
  inches = 0.16, 
  col = "brown4",
  legend.pos = "topright",  
  legend.title.txt = "Total NBI"
)
# Diseño
layoutLayer(title = " Distribución NBI en Meta",
            sources = "Sources: DANE, 2018\n© OpenStreetMap",
            author = " Erika Aparicio",
            frame = TRUE, north = FALSE, tabtitle = TRUE)
# Flecha norte
north(pos = "topleft")

#
#par(opar)

7. 2 mapas de Coropletas

En los mapas coropléticos, las áreas se sombrean de acuerdo con la variación de una variable cuantitativa. Se utilizan para representar razones o índices.
choroLayer () muestra mapas de coropletas. Los argumentos nclass, method y breaks permiten personalizar la clasificación variable.
getBreaks () permite clasificar fuera de la función misma. Las paletas de colores se definen con col y se puede crear un conjunto de colores con carto.pal (). Si desea consultar todas las paletas de colores puede hacerlo mediante display.carto.all ()
#display.carto.all(n=8)  retirar el # para observar las paletas de colores 
# establecer margenes 
opar <- par(mar = c(0,0,1.2,0))
# establecer el color de fondo de la figura
par(bg="grey90")
# Trazar municipios (solo se traza el color de fondo)
plot(st_geometry(nbi_munic_new), col = NA, border = NA, bg = "#aadaff")
# plot NBI
choroLayer(
  x = nbi_munic_new, 
  var = "NBI",
  method = "geom",
  nclass=6,
  col = carto.pal(pal1 = "kaki.pal", n1 = 6),
  border = "white", 
  lwd = 0.5,
  legend.pos = "topright", 
  legend.title.txt = "NBI",
  add = TRUE
) 
# Diseño
layoutLayer(title = "Distribución NBI en Meta", 
            sources = "Source: DANE, 2018",
            author = "Erika Aparicio", 
            frame = TRUE, north = TRUE, tabtitle = TRUE, col="black") 
# Flecha del norte
north(pos = "topleft")

#
#par(opar)

7.3 Símbolos proporcionales y mapa de tipología

La función propSymbolsTypoLayer () crea un mapa de símbolos que son proporcionales a los valores de una primera variable y coloreados para reflejar las modalidades de una segunda variable cualitativa. Se utiliza una combinación de argumentos propSymbolsLayer () y typoLayer ().
Primero, necesitamos crear una variable cualitativa. Usemos la función mutate para esta tarea.
nbi_munic_2 <- dplyr::mutate(nbi_munic_new, pobreza = ifelse(MISERIA > 20, "Extrema", 
                                                         ifelse(HACINAMIENTO > 5, "Alta", "Intermedia")))
Tenga en cuenta que el nuevo atributo se llama pobreza. Su valor depende de los valores umbral definidos por el usuario. Asegúrese de verificar la sintaxis del comando ifelse para comprender lo que está sucediendo.
head(nbi_munic_2)
library(sf)
library(cartography)
# set margins
opar <- par(mar = c(0,0,1.2,0))
# Plot the municipalities
plot(st_geometry(nbi_munic_2), col="#f2efe9", border="#b38e43", bg = "#aad3df", 
     lwd = 0.5)
# trazar  simbolos con diferente color 
propSymbolsTypoLayer(
  x = nbi_munic_2, 
  var = "NBI", 
  inches = 0.2,
  symbols = "circle",
  border = "white",
  lwd = .4,
  legend.var.pos = c(1360000, 950000),
  legend.var.title.txt = "NBI",
  var2 = "pobreza",
  legend.var2.values.order = c("Extrema", "Alta", 
                               "Intermedia"),
  col = carto.pal(pal1 = "multi.pal", n1 = 3),
  legend.var2.pos = c(1360000, 800000), 
  legend.var2.title.txt = "Pobreza"
) 
# Diseño
layoutLayer(title="Distribución NBI en Meta", 
            author = "Erika Aparicio", 
            sources = "Source: DANE, 2018", 
            scale = 1, tabtitle = TRUE, frame = TRUE)
# flecha del norte
north(pos = "topleft")

#
#par(opar)

7.4 Mapas de etiquetas

Intentemos combinar las funciones choroLayer y labelLayer:
library(sf)
library(cartography)
# establecer margenes 
opar <- par(mar = c(0,0,1.2,0))
# establecer el color de fondo de la figura
par(bg="grey25")
# plot municipalities
plot(st_geometry(nbi_munic_2), col = "#e4e9de", border = "darkseagreen4", 
     bg = "grey75", lwd = 0.5)
# plot NBI
choroLayer(
  x = nbi_munic_new, 
  var = "NBI",
  method = "geom",
  nclass=5,
  col = carto.pal(pal1 = "kaki.pal", n1 = 6),
  border = "white", 
  lwd = 0.4,
  legend.pos = c(1370000, 920000), 
  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 = "grey20", 
  r = 0.1, 
  overlap = FALSE, 
  show.lines = FALSE
)
# Diseño del mapa
layoutLayer(
  title = "Municipios de Meta", 
  sources = "Source: DANE, 2018",  
  author = "Erika Aparicio", 
  frame = TRUE,
  north = TRUE, 
  tabtitle = TRUE, 
  theme = "taupe.pal"
) 

#
#par(opar)
En conclusión, se observa que lamentablemnte muchos de los municipios del departamento presentan un % bastante alto (del 32 al 53%) de insatisfación con respecto al cubrimiento las necesidades básicas, lo que es un llamado a evaluar y plantar diferentes metodologias de desarrollo con el fin de bajar las necesidades básicas insatisfechas de la población. Ahora, veamos como es el comportamiento de algunos indicadores de las NBI como es el % de personas en miseria en cada municipio del departamento y el % de inasistencia escolar
# establecer margenes 
opar <- par(mar = c(0,0,1.2,0))
# establecer el color de fondo de la figura
par(bg="grey25")
# plot municipalities
plot(st_geometry(nbi_munic_2), col = "#e4e9de", border = "darkseagreen4", 
     bg = "grey75", lwd = 0.5)
# plot NBI
choroLayer(
  x = nbi_munic_new, 
  var = "MISERIA",
  method = "geom",
  nclass=5,
  col = carto.pal(pal1 = "red.pal", n1 = 6),
  border = "white", 
  lwd = 0.4,
  legend.pos = c(1370000, 900000), 
  legend.title.txt = "Miseria",
  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
)
# Diseño del mapa
layoutLayer(
  title = "Municipios de Meta", 
  sources = "Source: DANE, 2018",  
  author = "Erika Aparicio", 
  frame = TRUE,
  north = TRUE, 
  tabtitle = TRUE, 
  theme = "taupe.pal"
) 

# establecer margenes 
opar <- par(mar = c(0,0,1.2,0))
# establecer el color de fondo de la figura
par(bg="grey25")
# plot municipalities
plot(st_geometry(nbi_munic_2), col = "#e4e9de", border = "darkseagreen4", 
     bg = "grey75", lwd = 0.5)
# plot NBI
choroLayer(
  x = nbi_munic_new, 
  var = "INASISTENCIA",
  method = "geom",
  nclass=5,
  col = carto.pal(pal1 = "wine.pal", n1 = 6),
  border = "white", 
  lwd = 0.3,
  legend.pos = c(1340000, 710000), 
  legend.title.txt = "Inasistencia escolar",
  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
)
# Diseño del mapa
layoutLayer(
  title = "Municipios de Meta", 
  sources = "Source: DANE, 2018",  
  author = "Erika Aparicio", 
  frame = TRUE,
  north = TRUE, 
  tabtitle = TRUE, 
  theme = "taupe.pal"
) 

De este modo, solo observando estos dos indicadores, los municipios de Puerto Gaitán, Mapiripan, Puerto Concordia, La macarena son los que presentan mayores problemas, los cuales también presentan una alto indice NBI

7.5 Mapa de isopleta

Los mapas de Isopleta se basan en el supuesto de que el fenómeno a representar tiene una distribución continua. Estos mapas utilizan un enfoque de modelado de interacción espacial que tiene como objetivo calcular indicadores basados en valores de stock ponderados por distancia. Permite una representación espacial del fenómeno independiente de la heterogeneidad inicial de la división territorial. smoothLayer () depende en gran medida del paquete SpatialPosition. La función utiliza una capa de puntos marcados y un conjunto de parámetros (una función de interacción espacial y sus parámetros) y muestra una capa de mapa isopleta.
Usemos otro conjunto de datos para hacer un mapa isopleta. En este caso, subiré datos estadísticos sobre la producción de palma de aceite en el 2018 en Meta. Ya conocemos este conjunto de datos, ya que se utilizó en un cuaderno anterior para ilustrar las uniones basadas en atributos.
Lea el conjunto de datos:
crops2018 <- read_excel("C:/Users/oaparicio15/Desktop/QGIS/ColombiaDatos/META_EVA2.xlsx")
head(crops2018) 
Filtrar filas que representan solo datos del cultivo de maíz:
crops2018 %>%
  filter(CULTIVO == "MAIZ") -> maiz2018
head(maiz2018)
Ahora, se debe crear un nuevo atributo que coincida con los códigos de los municipios:
maiz2018$TEMP <-  as.character(maiz2018$COD_MUN)
head(maiz2018)
maiz2018$MPIO_CCDGO <- as.factor(maiz2018$TEMP)
Hecho lo anterior, es hora de hacer la unión
maiz_munic = left_join(munic, maiz2018, by="MPIO_CCDGO")
## Warning: Column `MPIO_CCDGO` joining factors with different levels, coercing to
## character vector
Es necesario verificar la sálida
head(maiz_munic)
Ahora, reproyectemos los municipios:
rep_maiz <- st_transform(maiz_munic, crs = 3116)
Tiempo de mapear
# establecer margenes
opar <- par(mar = c(0,0,1.2,0))
# plot municipalities (only the backgroung color is plotted)
plot(st_geometry(rep_maiz), col = NA, border = "black", bg = "grey75")
# plot isopleth map
smoothLayer(
  x = rep_maiz, 
  var = 'PRODUCCION',
  typefct =  "exponential",
  span = 25000,
  beta = 2,
  nclass = 10,
  col = carto.pal(pal1 = 'green.pal', n1 = 10),
  border = "grey",
  lwd = 0.1, 
  mask = rep_maiz, 
  legend.values.rnd = -3,
  legend.title.txt = "PRODUCCION",
  legend.pos = "topright", 
  add=TRUE
)
# Anotaciones en el mapa 
text(x = 1360000, y = 800000, cex = 0.6, adj = 0, font = 3,  labels = 
       "Función distancia:\n- type = exponencial\n- beta = 2\n- span = 25 km")
# Diseño
layoutLayer(title = "Distribucción en Meta de la producción de maíz",
            sources = "Sources: DANE and MADR, 2018",
            author = "Erika Aparicio",
            frame = FALSE, north = FALSE, tabtitle = TRUE, theme = "green.pal")
# Flecha del norte
north(pos = "topleft")

#
par(opar)

8. Guardando mapas

Produzcamos otro mapa de producción de maíz en 2018. Esta vez usaremos símbolos proporcionales y mapas de coropletas. La salida se guardará como un archivo .png.
Primero, algunas observaciones: - propSymbolsChoroLayer () crea un mapa de símbolos que son proporcionales a los valores de una primera variable y coloreados para reflejar la clasificación de una segunda variable. - se utiliza una combinación de argumentos propSymbolsLayer () y choroLayer ().
El siguiente fragmento no muestra un mapa. En cambio, escribe el mapa en el nombre de archivo maiz_2018.png debajo del directorio de trabajo.
### open the plot
png("C:/Users/oaparicio15/Desktop/QGIS/ColombiaDatos/maiz_2018.png", width = 2048, height = 1526)
opar <- par(mar = c(0,0,5,5))
# Plot the municipalities
plot(st_geometry(rep_maiz), col="darkseagreen3", border="darkseagreen4",  
     bg = "white", lwd = 0.7)
# Unir simbolos con la coloracion de coropletas 
propSymbolsChoroLayer(x = rep_maiz, var = "PRODUCCION", var2 = "RENDIMIENTO",
                      col = carto.pal(pal1 = "green.pal", n1 = 3,
                                      pal2 = "red.pal", n2 = 3),
                      inches = 0.9, method = "q6",
                      border = "grey50", lwd = 1,
                      legend.title.cex = 1.7,
                      legend.values.cex = 1.0,
                      legend.var.pos = "bottomright", 
                      legend.var2.pos = "left",
                      legend.var2.values.rnd = 2,
                      legend.var2.title.txt = "Rendimiento (Ton/Ha)",
                      legend.var.title.txt = "Producción de maíz en 2018",
                      legend.var.style = "e")
# Diseño del plot
labelLayer(
  x = rep_maiz, 
  txt = "MPIO_CNMBR", 
  col= "white", 
  cex = 1.0, 
  font = 4,
  halo = FALSE, 
  bg = "white", 
  r = 0.1, 
  overlap = FALSE, 
  show.lines = FALSE
)
# Diseño
layoutLayer(title="Producción y rendimiento del cultivo de maíz en Meta, 2018",
            author = "Erika Aparicio", 
            sources = "Sources: MADR & DANE, 2018", 
            scale = , tabtitle = FALSE, frame = TRUE)
# north arrow
north(pos = "topleft")
#
title(main="Producción y rendimiento de maíz en Meta, 2018", cex.main=3,
      sub= "Source: MADR & DANE, 2018", cex.sub=2)
#
graticule = TRUE
#
par(opar)
### close the plot
dev.off()
## png 
##   2
## png 
##   2
Una vez que guardamos un mapa, podemos agregarlo a nuestro informe R Markdown usando la sintaxis de Markdown de la siguiente manera:
Producción de maiz en el departamento de Meta,2018

Producción de maiz en el departamento de Meta,2018

Ahora veamos como fue la producción y rendimiento del cultivo de palma de aceite en el año 2018, puesto que en los últimos años este cultivo ha ido creciendo rapidamente en el departamento
crops2018 %>%
  filter(CULTIVO == "PALMA DE ACEITE") -> palma2018
palma2018$TEMP <-  as.character(palma2018$COD_MUN)
head(palma2018)
palma2018$MPIO_CCDGO <- as.factor(palma2018$TEMP)
palma_munic = left_join(munic, palma2018, by="MPIO_CCDGO")
## Warning: Column `MPIO_CCDGO` joining factors with different levels, coercing to
## character vector
head(palma_munic)
rep_palma <- st_transform(palma_munic, crs = 3116)
### open the plot
png("C:/Users/oaparicio15/Desktop/QGIS/ColombiaDatos/palma_2018.png", width = 2048, height = 1526)
opar <- par(mar = c(0,0,5,5))
# Plot the municipalities
plot(st_geometry(rep_palma), col="darkseagreen3", border="darkseagreen4",  
     bg = "white", lwd = 0.7)
# Unir simbolos con la coloracion de coropletas 
propSymbolsChoroLayer(x = rep_palma, var = "PRODUCCION", var2 = "RENDIMIENTO",
                      col = carto.pal(pal1 = "green.pal", n1 = 3,
                                      pal2 = "red.pal", n2 = 3),
                      inches = 0.9, method = "q6",
                      border = "grey50", lwd = 1,
                      legend.title.cex = 1.7,
                      legend.values.cex = 1.0,
                      legend.var.pos = "bottomright", 
                      legend.var2.pos = "left",
                      legend.var2.values.rnd = 2,
                      legend.var2.title.txt = "Rendimiento (Ton/Ha)",
                      legend.var.title.txt = "Producción de palma en 2018",
                      legend.var.style = "e")
# Diseño del plot
labelLayer(
  x = rep_palma, 
  txt = "MPIO_CNMBR", 
  col= "white", 
  cex = 1.0, 
  font = 4,
  halo = FALSE, 
  bg = "white", 
  r = 0.1, 
  overlap = FALSE, 
  show.lines = FALSE
)
# Diseño
layoutLayer(title="Producción y rendimiento del cultivo de palma de aceite en Meta, 2018",
            author = "Erika Aparicio", 
            sources = "Sources: MADR & DANE, 2018", 
            scale = , tabtitle = FALSE, frame = TRUE)
# Flecha del norte
north(pos = "topleft")
#
title(main="Producción y rendimiento de palma de aceite en Meta, 2018", cex.main=3,
      sub= "Source: MADR & DANE, 2018", cex.sub=2)
#
graticule = TRUE
#
par(opar)
### close the plot
dev.off()
## png 
##   2
Producción de maiz en el departamento de Meta,2018

Producción de maiz en el departamento de Meta,2018

Entonces, como se observa, efectivamente, el cultivo de palma por lo general tuvo una producción y rendimiento mucho más alto en el año 2018 que el cultivo de maíz
sessionInfo()
## R version 3.6.3 (2020-02-29)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 18363)
## 
## 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] SpatialPosition_1.2.0 cartography_2.4.1     raster_3.0-12        
##  [4] sf_0.8-1              rgeos_0.5-2           sp_1.4-1             
##  [7] readxl_1.3.1          forcats_0.5.0         stringr_1.4.0        
## [10] dplyr_0.8.5           purrr_0.3.3           readr_1.3.1          
## [13] tidyr_1.0.2           tibble_2.1.3          ggplot2_3.3.0        
## [16] tidyverse_1.3.0      
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_1.0.4         lubridate_1.7.8    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] rstudioapi_0.11    rmarkdown_2.1      rgdal_1.4-8        munsell_0.5.0     
## [21] broom_0.5.5        compiler_3.6.3     modelr_0.1.6       xfun_0.12         
## [25] pkgconfig_2.0.3    htmltools_0.4.0    tidyselect_1.0.0   codetools_0.2-16  
## [29] fansi_0.4.1        crayon_1.3.4       dbplyr_1.4.2       withr_2.1.2       
## [33] grid_3.6.3         nlme_3.1-144       jsonlite_1.6.1     gtable_0.3.0      
## [37] lifecycle_0.2.0    DBI_1.1.0          magrittr_1.5       units_0.6-6       
## [41] scales_1.1.0       KernSmooth_2.23-16 cli_2.0.2          stringi_1.4.6     
## [45] fs_1.4.1           xml2_1.3.1         generics_0.0.2     vctrs_0.2.4       
## [49] tools_3.6.3        glue_1.3.2         hms_0.5.3          slippymath_0.3.1  
## [53] yaml_2.2.1         colorspace_1.4-1   classInt_0.4-2     rvest_0.3.5       
## [57] knitr_1.28         haven_2.2.0