Este es un cuaderno de R Markdown que está elaborado con el objetivo de poner en práctica los conceptos vistos en el curso de geomática básica de la Universidad Nacional de Colombia, aprender a hacer mapas temáticos, ilustrar cartografía temática para el departamento de Huila, conocer las herramientas que son útiles en agronomía para la interpretación de un conjunto de datos de interés agronómico entre otros, recopilados acerca de una región por medio de ilustraciones cartográficas y advertir los posibles errores que se pueden presentar en la creación de un cuaderno. Ha sido creado, compilado y publicado desde una intalación local de RStudio. La realización de este cuaderno estuvo apoyada en el cuaderno guía elaborado por el profesor Iván Lizarazo el 6 de abril de 2020.
De acuerdo con el Centro Nacional para la Prevención de Enfermedades Crónicas y Promoción de la Salud , División de Prevención de Enfermedades Cardíacas y Accidentes Cerebrovasculares, “los mapas temáticos se centran en un tema en particular.” Como por ejemplo, las tasas de muertes por enfermedades cardíacas en un país o la temperatura en un día o mes, en diferentes ciudades.
Según el Ing. Alvaro Dávila “Cuando se va analizar un mapa, éste tiene un proposito y un usuario intérprete que debe analizarse.” Es decir, que tenemos que conocer cuales son los interéses de la persona o las personas a quienes va dirigida la información contenida en el mapa.
La fuente de información para la elaboración de mapas es importante. Para Amanda 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.”
Briney resume varias técnicas de mapeo temático que se utilizan con mayor frecuencia:
Estos mapas representan datos cuantitativos como un color y puede mostrar densidad, porcentaje, valor promedio o 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.
que se utilizan 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 diferencias en las ocurrencias. Los círculos se utilizan con mayor frecuencia, pero también son adecuados los cuadrados y otras formas geométricas. La forma más común de dimensionar estos símbolos es hacer que sus áreas sean proporcionales a los valores que se van a representar utilizando software de mapeo o dibujo.
que utiliza isolíneas 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. Generalmente, 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 isolínea es de 500 pies, entonces un lado debe tener más de 500 pies y un lado debe ser más bajo.
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.
Usaremos datos sobre Necesidades Básicas Insatisfechas (NBI) del Censo Nacional de Población y Vivienda 2018 que están disponibles en el Geoportal del DANE.
Los mapas temáticos son útiles para transmitir información demográfica. Puede explorar varios mapas temáticos del DANE usando este enlace.
Anteriormente, descargué el archivo NBI, en formato .xlsx, a mi computadora. Luego, usé Excel para eliminar datos de municipios que no se encuentran dentro del Departamento de Huila. También “limpié” los datos, que eliminé varias filas con imágenes institucionales o sin información. Estas filas se ubicaron tanto al principio como al final del archivo original. Conservo las columnas referentes a todo el municipio (es decir, eliminé las columnas correspondientes a “cabecera” y “zona rural”). Guardé los datos resultantes, correspondientes solo a los municipios huilenses como NBI_Huila.xlsx.
Si hemos usado RStudio anteriormente, resulta útil “limpiar” la memoria que aparece en la ventana superior derecha antes de comenzar. Esto, con el fin de mejorar el rendimiento del programa durante la elaboración del cuaderno. Esto es posible con la siguiente instrucción:
rm(list = ls())
La siguiente instrucción es útil a la hora de publicar. Por eso la colocamos desde el comienzo:
knitr::opts_chunk$set(echo = TRUE)
Instalemos al mismo tiempo las bibliotecas que necesitamos. (Importante. Escriba esta instrucción en la consola y ejecutela. En esta parte sucedió que al escribir la instrucción y ejecutarla dando click en Knit aparecía error. Luego de varios intentos se escribió en la consola, se ejecutó y quedó solucionado el problema)
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)
Carguemos las librerías previamente instaladas:
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.0.3
## -- Attaching packages ----------------------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.2 v purrr 0.3.4
## v tibble 3.0.3 v dplyr 1.0.2
## v tidyr 1.1.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-5, (SVN revision 640)
## GEOS runtime version: 3.8.0-CAPI-1.13.1
## Linking to sp version: 1.4-2
## 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.8.0, GDAL 3.0.4, PROJ 6.3.1
library(cartography)
library(SpatialPosition)
Aquí vamos a utilizar el archivo editado csv con las “estadísticas municipales agropecuarias” para Huila.
DATOS_NBI <- read_excel("C:/Users/Sergio/Downloads/GB/Semana_7/Informe_2/NBI_Huila.xlsx")
Revisemos los atributos de los datos.
head(DATOS_NBI)
Si queremos obtener información acerca cuál es el municipio de Huila con el mayor porcentaje de Necesidades Básicas Insatisfechas (NBI) lo podemos hacer de la siguiente forma:
DATOS_NBI %>%
slice(which.max(PER_NBI)) -> max_DATOS_NBI
max_DATOS_NBI
Si comparamos los resultados de mayor porcentaje de Necesidades Básicas Insatisfechas (NBI) de Huila con los resultados de Antioquia en el cuaderno guia es evidente que Murindó municipio de Antioquia tiene un porcentaje mayor al de Colombia municipio de Huila.
Ahora, obtengamos un porcentaje pero que sea el menor de todos los municipios que conforman el departamento de Huila.
DATOS_NBI %>%
slice(which.min(PER_NBI)) -> min_DATOS_NBI
min_DATOS_NBI
Aunque las intrucciones previas permiten acceder a un dato en especial como el máximo o el mínimo de todos los datos, necesitamos tener información global en bloque. Para esto podemos ordenar en forma ascendente o descendente. Primero apliquemos el orden descendente y luego el ascendente:
DATOS_NBI %>%
arrange(desc(PER_NBI)) -> desc_DATOS_NBI
desc_DATOS_NBI
Ahora ascendentemente como parte de repetir y practicar.
DATOS_NBI %>%
arrange(PER_NBI) -> ascen_DATOS_NBI
ascen_DATOS_NBI
Para esta sección vamos a necesitar un archivo SHP que descargamos previamente del Geoportal del DANE con datos pertenecientes al departamento de Huila para el año 2017. El nombre del archivo dentro del conjunto de datos descargados es MGN_MPIO_POLITICO con tipo de archivo AutoCAD Shape Source (.shp). Si desea ir al lugar de descarga puede dar click aquí.
Ahora, leamos los datos usando la biblioteca sf:
munic <- st_read("C:/Users/Sergio/Downloads/GB/ADMINISTRATIVO/MGN_MPIO_POLITICO.shp")
## Reading layer `MGN_MPIO_POLITICO' from data source `C:\Users\Sergio\Downloads\GB\ADMINISTRATIVO\MGN_MPIO_POLITICO.shp' using driver `ESRI Shapefile'
## Simple feature collection with 37 features and 9 fields
## geometry type: POLYGON
## dimension: XY
## bbox: xmin: -76.62466 ymin: 1.552125 xmax: -74.41303 ymax: 3.843208
## geographic CRS: WGS 84
Reconocer cuáles son los atributos de nuestros datos siempre será parte indispensable de cada práctica. Identifiquemos cuáles son los de MPIO_CCDGO:
head(munic$MPIO_CNMBR)
## [1] "NEIVA" "GIGANTE" "GUADALUPE" "HOBO" "ÍQUIRA" "ISNOS"
Podemos usar la función left_join para unir los municipios y los datos de NBI. Nota: Como la función left_join requiere una variable que contenga los mismos valores en una columna de ambos archivos para realizar la unión, para este caso los archivos NBI_Huila no lo poseían. Así que buscamos el archivo lo editamos y colocamos la columna requerida.
Otro inconveniente que se presentó fue que al agregar la nueva columna con la variable que contiene los mismo valores en ambos datos, Rstudio la hizo pasar como double y no como character. Por eso relizamos la siguiente instrucción:
DATOS_NBI$CODE <- as.character(DATOS_NBI$CODE)
head(DATOS_NBI)
Ahora si, después de corregir los inconvenientes podemos ejecutar la unión:
NBI_munic = left_join(munic, DATOS_NBI, by = c("MPIO_CCDGO"="CODE"))
NBI_munic %>%
dplyr::select(NOM_MUN, MPIO_CCDGO, PER_NBI ) -> check_NBI_munic
head(check_NBI_munic)
Al observar los valores “check_NBI_munic” advertimos que están desorganizados, si queremos organizarlos lo podemos hacer como antes. Vamos a ordenarlos en orden descendente:
check_NBI_munic %>%
arrange(desc(PER_NBI)) -> desc_check_NBI_munic
desc_check_NBI_munic
Ahora, reproyectemos los municipios:
NBI_munic_nuevo <- st_transform(NBI_munic, crs = 3116)
De acuerdo con el profesor Iván Lizarazo: Utilizaremos el paquete de cartografía que tiene como objetivo obtener mapas temáticos con la calidad visual de los construidos con un software clásico de cartografía o GIS. Sus funciones son intuitivas para los usuarios y garantizan la compatibilidad con los flujos de trabajo comunes de R.La biblioteca de cartografía utiliza 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.
Como el mapa que vamos a realizar tiene “figuras” representativas ubicadas sobre los municipios del departamento para indicar la información estadística, estas “figuras” o simbolos que muesttran mosaicos de OpenStreetMap se descargan con las funciones getTiles() y tilesLayer().
Conviene que sea cuidadoso al citar la fuente de los mosaicos.
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.
MUNICIPIO.osm <- getTiles(
x = NBI_munic_nuevo,
type = "OpenStreetMap",
zoom = 8,
cachedir = TRUE,
crop = FALSE
)
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0
## +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## datum WGS_1984 in CRS definition
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0
## +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## datum WGS_1984 in CRS definition
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0
## +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## datum WGS_1984 in CRS definition
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0
## +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## datum WGS_1984 in CRS definition
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0
## +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## datum WGS_1984 in CRS definition
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0
## +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## datum WGS_1984 in CRS definition
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded datum Unknown based on GRS80 ellipsoid in CRS definition,
## but +towgs84= values preserved
opar <- par(mar = c(7.6,0,1.2,0.5))
# plot osm tiles
tilesLayer(x = MUNICIPIO.osm)
# plot municipalities (only borders are plotted)
plot(st_geometry(NBI_munic_nuevo), col = NA, border = "Green", add=TRUE)
# plot NBI
propSymbolsLayer(
x = NBI_munic_nuevo,
var = "PER_NBI",
inches = 0.1,
col = "brown4",
legend.pos = "topright",
legend.title.txt = "Total NBI"
)
# layout
layoutLayer(title = " Distribución de NBI en Huila",
sources = "Sources: DANE, 2018\n© OpenStreetMap",
author = " Sergio García ",
frame = TRUE, north = FALSE, tabtitle = TRUE)
# north arrow
north(pos = "topleft")
Según el profesor Iván Lizarazo: "En los mapas de coropletas, las áreas están sombreadas de acuerdo con la variación de una variable cuantitativa. Se utilizan para representar ratios o índices.
choroLayer () muestra mapas de coropletas. Los argumentos nclass, método y rupturas permiten personalizar la clasificación de las variables.
getBreaks () permite clasificar fuera de la función en sí. Las paletas de colores se definen con col y se puede crear un conjunto de colores con carto.pal (). Consulte también display.carto.all ()".
# Estableciendo márgenes
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_nuevo), col = NA, border = NA, bg = "lavender")
# Gráfico NBI
choroLayer(
x = NBI_munic_nuevo,
var = "PER_NBI",
method = "geom",
nclass=5,
col = carto.pal(pal1 = "orange.pal", n1 = 6),
border = "green",
lwd = 0.5,
legend.pos = "topright",
legend.title.txt = "NBI",
add = TRUE
)
# Diseño
layoutLayer(title = "Distribución de NBI en Huila",
sources = "Source: DANE, 2018",
author = "Sergio García",
frame = TRUE, north = TRUE, tabtitle = TRUE, col="black")
# Flecha indicando el norte
north(pos = "topleft")
#
#par(opar)
Para el profesor Lizarazo (2020): “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 de calidad. Se utiliza una combinación de argumentos propSymbolsLayer () y typoLayer ()” (Thematic Cartography).
Con este proposito vamos a crear una variable cualitativa. Damos esa instrucción con la función “mutate”.
NBI_munic_two <- dplyr::mutate(NBI_munic_nuevo, poverty = ifelse(PER_MISERY > 20, "Extreme",
ifelse(HACINAMIENTO > 5, "Intermediate", "High")))
El atributo se tiene por nombre pobreza. Su valor depende de los valores definidos por el usuario. Asegúrese de verificar la sintaxis del comando ifelse para comprender lo que está sucediendo
head(NBI_munic_two)
library(sf)
library(cartography)
# Estableciendo Márgenes
opar <- par(mar = c(0,0,1.2,0))
# Trazar los municipios
plot(st_geometry(NBI_munic_two), col = sf.colors(12, categorical = TRUE), border="#b38e43", bg = "SteelBlue2",
lwd = 0.5)
# Trazar símbolos con coloración coropleta
propSymbolsTypoLayer(
x = NBI_munic_two,
var = "PER_NBI",
inches = 0.5,
symbols = "bar",
border = "green",
lwd = .5,
legend.var.pos = "bottomright",
legend.var.title.txt = "NBI",
var2 = "poverty",
legend.var2.values.order = c("High", "Intermediate"),
col = carto.pal(pal1 = "multi.pal", n1 = 14),
legend.var2.pos = "topright",
legend.var2.title.txt = "NIVEL MISERIA"
)
# Diseño
layoutLayer(title="Distribución de NBI en Huila",
author = "Sergio García",
sources = "Source: DANE, 2018",
scale = 1, tabtitle = TRUE, frame = TRUE)
# Colocar flecha hacia el norte
north(pos = "topleft")
Análisis: Cuando se escribía el código surgió un inconveniente, y es que, cuando corríamos el código con está indicación (legend.var2.values.order = c(“Extreme,”High“,”Intermediate“)) de una de las partes del código resultaba error. Sólo se solucionó al eliminar de la linea de código la palabra”Extreme", tal vez por que en el departamento la información no se ajustaba en ese rango. Por eso en el gráfico podemos ver que en el departamento de Huila el nivel de miseria (así lo nombramos para este gráfico) esta en intermedio y alto.
#
#par(opar)
Las funciones choroLayer y labelLayer son funciones que se permiten combinar. Hagamos una prueba:
library(sf)
library(cartography)
# set margins
opar <- par(mar = c(0,0,1.2,0))
# set figure background color
par(bg="yellow")
# plot municipalities
plot(st_geometry(NBI_munic_two), col = "#e4e9de", border = "darkseagreen4",
bg = "peachpuff2", lwd = 0.5)
# plot NBI
choroLayer(
x = NBI_munic_nuevo,
var = "PER_NBI",
method = "geom",
nclass=5,
col = carto.pal(pal1 = "green.pal", n1 = 5),
border = "yellow",
lwd = 0.7,
legend.pos = "topright",
legend.title.txt = "NBI",
add = TRUE
)
# plot labels
labelLayer(
x = NBI_munic_two,
txt = "NOM_MUN",
col= "white",
cex = 0.4,
font = 4,
halo = TRUE,
bg = "grey25",
r = 0.1,
overlap = FALSE,
show.lines = FALSE
)
# map layout
layoutLayer(
title = "Municipalidades de Huila",
sources = "Source: DANE, 2018",
author = "Sergio García",
frame = TRUE,
north = TRUE,
tabtitle = TRUE,
theme = "green.pal"
)
Según el profesor Iván Lizarazo: los mapas de Isopleth 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 de isopletas. En este caso, subiré datos estadísticos sobre la producción de café de 2018 en Huila. Ya conocemos este conjunto de datos, ya que se usó en un cuaderno anterior para ilustrar uniones basadas en atributos.
Lectura de datos:
EVA2018 <- read_excel("C:/Users/Sergio/Downloads/GB/Semana_5/Informe_1/EVA_Huila.csv.xlsx")
head(EVA2018)
Los datos que aparecen en la tabla anterior están mezclados. Así que necesitamos filtrar las filas que contienen información referente a la producción de café:
EVA2018 %>%
filter(CULTIVO == "CAFE") -> cafe2018
Necesitamos crear un atributo que coincida con los códigos de los municipios:
cafe2018$TEMP <- as.character(cafe2018$COD_MUN)
head(cafe2018$TEMP)
## [1] "41551" "41006" "41298" "41396" "41306" "41020"
cafe2018$MPIO_CCDGO <- as.factor(paste("", cafe2018$TEMP, sep=""))
head(cafe2018$MPIO_CCDGO)
## [1] 41551 41006 41298 41396 41306 41020
## 35 Levels: 41001 41006 41013 41016 41020 41026 41078 41132 41206 ... 41807
Las conversiones realizadas anteriormente se hicieron con e fin de definir variables de tipo “compatibles” para poder unir los datos.
COFFE_munic = left_join(munic, cafe2018, by = "MPIO_CCDGO")
En todo momento es buena costumbre revisar los datos configurados:
head(COFFE_munic)
Obsevando los datos, Rendimiento es character así que lo convertimos en double:
COFFE_munic$Rendimiento <- as.double(COFFE_munic$Rendimiento)
head(COFFE_munic)
Vamos a reproyectar las municipalidades:
rprj_COFFE <- st_transform(COFFE_munic, crs = 3116)
Grafiquemos:
# Estableciendo margenes
opar <- par(mar = c(0,0,1.2,0))
# trazar municipios (solo se traza el color de fondo)
plot(st_geometry(rprj_COFFE), col = NA, border = "black", bg = "azure")
# trazar mapa isopleta
smoothLayer(
x = rprj_COFFE,
var = 'Produccion',
typefct = "exponential",
span = 25000,
beta = 2,
nclass = 10,
col = carto.pal(pal1 = 'turquoise.pal', n1 = 10),
border = "grey",
lwd = 0.1,
mask = rprj_COFFE,
legend.values.rnd = -3,
legend.title.txt = "Production",
legend.pos = "topright",
add = TRUE
)
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded datum Unknown based on GRS80 ellipsoid in CRS definition,
## but +towgs84= values preserved
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded datum Unknown based on GRS80 ellipsoid in CRS definition,
## but +towgs84= values preserved
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded datum Unknown based on GRS80 ellipsoid in CRS definition,
## but +towgs84= values preserved
# anotación en el mapa
text(x = 690000, y = 780000, cex = 0.9, adj = 0, font = 3, labels = "Distance function:\n- type = exponential\n- beta = 2\n- span = 20 km")
# Diseño
layoutLayer(title = "Distribución de la Producción de Café en Huila",
sources = "Sources: DANE and MADR, 2018",
author = "Sergio García",
frame = FALSE, north = FALSE, tabtitle = TRUE, theme = "pastel.pal")
# flecha norte
north(pos = "topleft")
#
par(opar)
Produzcamos otro mapa de la producción de café 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 su lugar, escribe el mapa con el nombre de archivo cafe_2018.png en el directorio de trabajo.
### abre la trama
png("C:/Users/Sergio/Downloads/GB/Semana_7/Informe_2/cafe_2018.png", width = 2048, height = 1526)
# Estableciendo margenes
opar <- par(mar = c(0,0,5,5))
# Trazar los municipios
plot(st_geometry(rprj_COFFE), col="darkseagreen3", border="darkseagreen4",
bg = "ivory", lwd = 1)
# Trazar símbolos con coloración coropleta
propSymbolsChoroLayer(x = rprj_COFFE, var = "Produccion", var2 = "Rendimiento",
col = carto.pal(pal1 = "green.pal", n1 = 3,
pal2 = "red.pal", n2 = 3),
inches = 0.8, method = "q6",
border = "grey50", lwd = 1,
legend.title.cex = 2,
legend.values.cex = 1.5,
legend.var.pos = "right",
legend.var2.pos = "left",
legend.var2.values.rnd = 2,
legend.var2.title.txt = "Rendimiento\n(en Ton/Ha)",
legend.var.title.txt = "Producción de Café en 2018",
legend.var.style = "e")
# etiquetas de parcela
labelLayer(
x = rprj_COFFE,
txt = "MPIO_CNMBR",
col= "white",
cex = 1.0,
font = 5,
halo = FALSE,
bg = "white",
r = 0.1,
overlap = FALSE,
show.lines = FALSE
)
# diseño
layoutLayer(title="Producción y Rendimiento de Café en Huila, 2018",
author = "Sergio García",
sources = "Sources: MADR & DANE, 2018",
scale = 50, tabtitle = FALSE, frame = TRUE)
# flecha norte
north(pos = "topleft")
#
title(main="Producción y Rendimiento de Café en Huila, 2018", cex.main=3,
sub= "Source: MADR & DANE, 2018", cex.sub=2)
#
graticule = TRUE
#
par(opar)
### cerrar la trama
dev.off()
## png
## 2
# Incluyendo gráfico al informe
knitr::include_graphics("C:/Users/Sergio/Downloads/GB/Semana_7/Informe_2/cafe_2018.png")
Producción de Café en Huila, 2018
sessionInfo()
## R version 4.0.2 (2020-06-22)
## 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_2.0.1 cartography_2.4.2 sf_0.9-5
## [4] raster_3.3-13 rgeos_0.5-5 sp_1.4-2
## [7] readxl_1.3.1 forcats_0.5.0 stringr_1.4.0
## [10] dplyr_1.0.2 purrr_0.3.4 readr_1.3.1
## [13] tidyr_1.1.2 tibble_3.0.3 ggplot2_3.3.2
## [16] tidyverse_1.3.0
##
## loaded via a namespace (and not attached):
## [1] Rcpp_1.0.5 lubridate_1.7.9 lattice_0.20-41 png_0.1-7
## [5] class_7.3-17 assertthat_0.2.1 digest_0.6.25 R6_2.4.1
## [9] cellranger_1.1.0 backports_1.1.9 reprex_0.3.0 evaluate_0.14
## [13] e1071_1.7-3 httr_1.4.2 pillar_1.4.6 rlang_0.4.7
## [17] rstudioapi_0.11 blob_1.2.1 rmarkdown_2.3 rgdal_1.5-16
## [21] munsell_0.5.0 broom_0.7.0 compiler_4.0.2 modelr_0.1.8
## [25] xfun_0.16 pkgconfig_2.0.3 htmltools_0.5.0 tidyselect_1.1.0
## [29] codetools_0.2-16 fansi_0.4.1 crayon_1.3.4 dbplyr_1.4.4
## [33] withr_2.2.0 grid_4.0.2 lwgeom_0.2-5 jsonlite_1.7.1
## [37] gtable_0.3.0 lifecycle_0.2.0 DBI_1.1.0 magrittr_1.5
## [41] units_0.6-7 scales_1.1.1 KernSmooth_2.23-17 cli_2.0.2
## [45] stringi_1.5.3 fs_1.5.0 xml2_1.3.2 ellipsis_0.3.1
## [49] generics_0.0.2 vctrs_0.3.4 tools_4.0.2 glue_1.4.2
## [53] hms_0.5.3 slippymath_0.3.1 yaml_2.2.1 colorspace_1.4-1
## [57] isoband_0.2.2 classInt_0.4-3 rvest_0.3.6 knitr_1.29
## [61] haven_2.3.1