Este es el segundo cuaderno R Markdown para el curso Geomatica Básica 2023. Ilustra cómo hacer mapas temáticos que muestren la participación municipal de los dos grupos de cultivos más importantes para el departamento de Bolivar. Usaremos como fuente principal los archivos csv guardados en la libreta EVA, así como un shapefile de municipios obtenido en clase.
Las bibliotecas R requeridas son las siguientes:
library(sf)
library(dplyr)
library(readr)
Trabajaré con el Departamento de Bolivar con los siguientes archivos tipo cvs
list.files("C:/cuaderno2R", pattern=c('csv'))
## [1] "co.csv" "OLEAGINOSAS2018.csv" "TYP2018.csv"
Ahora se enlistan los archivos shapefile que se encuentran en el directorio de trabajo
list.files("C:/cuaderno2R/BOLIVAR")
## [1] "BOLIVAR_MPIO.cpg" "BOLIVAR_MPIO.dbf" "BOLIVAR_MPIO.prj" "BOLIVAR_MPIO.sbn"
## [5] "BOLIVAR_MPIO.sbx" "BOLIVAR_MPIO.shp" "BOLIVAR_MPIO.shx" "BOLIVAR_MPIO.xml"
Ahora, se leen los archivos basados en EVA obtenidos del primer cuaderno sobre los cultivos de mayor producción en el departamento de Bolivar
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.0
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
(TYP = read_csv("c:/cuaderno2R/TYP2018.csv",show_col_types = FALSE))
## # A tibble: 46 × 4
## COD_MUN MUNICIPIO GRUPO_CULTIVO max_prod
## <dbl> <chr> <chr> <dbl>
## 1 13657 SAN JUAN NEPOMUCENO TUBERCULOS Y PLATANOS 69000
## 2 13433 MAHATES TUBERCULOS Y PLATANOS 67500
## 3 13244 EL CARMEN DE BOLIVAR TUBERCULOS Y PLATANOS 47250
## 4 13873 VILLANUEVA TUBERCULOS Y PLATANOS 29400
## 5 13654 SAN JACINTO TUBERCULOS Y PLATANOS 19250
## 6 13442 MARIA LA BAJA TUBERCULOS Y PLATANOS 18000
## 7 13894 ZAMBRANO TUBERCULOS Y PLATANOS 16000
## 8 13670 SAN PABLO TUBERCULOS Y PLATANOS 12600
## 9 13473 MORALES TUBERCULOS Y PLATANOS 12000
## 10 13688 SANTA ROSA DEL SUR TUBERCULOS Y PLATANOS 11700
## # … with 36 more rows
Ahora se leen los municipios de del departamento de Bolivar
(mun.tmp = st_read("C:/cuaderno2R/BOLIVAR/BOLIVAR_MPIO.shp"))
## Reading layer `BOLIVAR_MPIO' from data source
## `C:\cuaderno2R\BOLIVAR\BOLIVAR_MPIO.shp' using driver `ESRI Shapefile'
## Simple feature collection with 46 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -76.19063 ymin: 6.99916 xmax: -73.74578 ymax: 10.80147
## Geodetic CRS: WGS 84
## Simple feature collection with 46 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -76.19063 ymin: 6.99916 xmax: -73.74578 ymax: 10.80147
## Geodetic CRS: WGS 84
## First 10 features:
## DPTO_CCDGO MPIO_CCDGO MPIO_CNMBR
## 1 13 13001 CARTAGENA DE INDIAS
## 2 13 13006 ACHÍ
## 3 13 13030 ALTOS DEL ROSARIO
## 4 13 13042 ARENAL
## 5 13 13052 ARJONA
## 6 13 13062 ARROYOHONDO
## 7 13 13074 BARRANCO DE LOBA
## 8 13 13140 CALAMAR
## 9 13 13160 CANTAGALLO
## 10 13 13188 CICUCO
## MPIO_CRSLC MPIO_NAREA MPIO_NANO DPTO_CNMBR
## 1 1599 593.2364 2017 BOLÍVAR
## 2 Ordenanza 15 de Abril 18 de 1934 951.7664 2017 BOLÍVAR
## 3 Ordenanza 30 de diciembre 13 de 1994 303.7462 2017 BOLÍVAR
## 4 ORD 18 DE MAYO 16 DE 1996 461.9323 2017 BOLÍVAR
## 5 1770 589.5791 2017 BOLÍVAR
## 6 ORD 41 DE DICIEMBRE 02 DE 1997 163.8084 2017 BOLÍVAR
## 7 Ordenanza 29 del 29 de Abril de 1931 430.7295 2017 BOLÍVAR
## 8 Ordenanza 42 del 27 de Abril de 1923 255.3533 2017 BOLÍVAR
## 9 Ordenanza 30 de diciembre 13 de 1994 881.4568 2017 BOLÍVAR
## 10 Ordenanza 30 de diciembre 30 de 1994 132.1484 2017 BOLÍVAR
## Shape_Leng Shape_Area geometry
## 1 4.0370005 0.04912313 MULTIPOLYGON (((-75.29333 1...
## 2 1.8371512 0.07817905 MULTIPOLYGON (((-74.53501 8...
## 3 0.9849827 0.02495982 MULTIPOLYGON (((-74.11309 8...
## 4 1.5548421 0.03791813 MULTIPOLYGON (((-73.94174 8...
## 5 1.3582253 0.04861694 MULTIPOLYGON (((-75.30055 1...
## 6 0.7833122 0.01351407 MULTIPOLYGON (((-74.98125 1...
## 7 1.5932497 0.03540188 MULTIPOLYGON (((-74.1041 8....
## 8 1.2921521 0.02106529 MULTIPOLYGON (((-75.00496 1...
## 9 1.7045837 0.07217248 MULTIPOLYGON (((-73.89546 7...
## 10 0.5173031 0.01095669 MULTIPOLYGON (((-74.67303 9...
Se seleccionan algunos atributos para limpiar el objeto
mun.tmp %>% select(MPIO_CCDGO, MPIO_CNMBR, MPIO_NAREA) -> municipios
Ahora, se leerá el archivo csv de las ciudades
(cities = read_csv("c:/cuaderno2R/co.csv"))
## Rows: 1102 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): city, country, iso2, admin_name, capital
## dbl (4): lat, lng, population, population_proper
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 1,102 × 9
## city lat lng country iso2 admin_name capital popul…¹ popul…²
## <chr> <dbl> <dbl> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 Bogotá 4.61 -74.1 Colombia CO Bogotá primary 9464000 7963000
## 2 Medellín 6.24 -75.6 Colombia CO Antioquia admin 2529403 2529403
## 3 Cali 3.44 -76.5 Colombia CO Valle del Ca… admin 2471474 2471474
## 4 Barranquilla 11.0 -74.8 Colombia CO Atlántico admin 1274250 1274250
## 5 Cartagena 10.4 -75.5 Colombia CO Bolívar admin 1036412 1036412
## 6 Soacha 4.58 -74.2 Colombia CO Cundinamarca minor 995268 995268
## 7 Palermo 2.89 -75.4 Colombia CO Huila minor 800000 800000
## 8 Cúcuta 7.91 -72.5 Colombia CO Norte de San… admin 750000 750000
## 9 Soledad 10.9 -74.8 Colombia CO Atlántico minor 698852 342556
## 10 Pereira 4.81 -75.7 Colombia CO Risaralda admin 590554 590554
## # … with 1,092 more rows, and abbreviated variable names ¹population,
## # ²population_proper
##Filas: 1102 columnas: 9 ## Especificación de filas y columnas ## chr (5): city, country, iso2, admin_name, capital ## dbl (4): lat, lng, population, population_proper
Hay que tener en cuenta que hay 1102 filas que representan ciudades en Colombia. Además que el objeto de las ciudades es no espacial (un tibble, en realidad).
Hay que tener en cuenta también que los valores de las coordenadas se almacenan en los atributos “lng” (latitud) y “lat” (longitud).
Para convertir ciudades en un objeto espacial (un objeto de característica simple, en este caso):
sf.cities <- st_as_sf(x = cities,
coords = c("lng", "lat"))
sf.cities
## Simple feature collection with 1102 features and 7 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -81.7006 ymin: -4.215 xmax: -67.4858 ymax: 13.3817
## CRS: NA
## # A tibble: 1,102 × 8
## city country iso2 admin…¹ capital popul…² popul…³ geometry
## <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <POINT>
## 1 Bogo… Colomb… CO Bogotá primary 9464000 7963000 (-74.0705 4.6126)
## 2 Mede… Colomb… CO Antioq… admin 2529403 2529403 (-75.5748 6.2447)
## 3 Cali Colomb… CO Valle … admin 2471474 2471474 (-76.5197 3.44)
## 4 Barr… Colomb… CO Atlánt… admin 1274250 1274250 (-74.7964 10.9639)
## 5 Cart… Colomb… CO Bolívar admin 1036412 1036412 (-75.5253 10.4236)
## 6 Soac… Colomb… CO Cundin… minor 995268 995268 (-74.2144 4.5781)
## 7 Pale… Colomb… CO Huila minor 800000 800000 (-75.4339 2.8883)
## 8 Cúcu… Colomb… CO Norte … admin 750000 750000 (-72.5047 7.9075)
## 9 Sole… Colomb… CO Atlánt… minor 698852 342556 (-74.77 10.92)
## 10 Pere… Colomb… CO Risara… admin 590554 590554 (-75.6946 4.8143)
## # … with 1,092 more rows, and abbreviated variable names ¹admin_name,
## # ²population, ³population_proper
st_crs(sf.cities) <- 4326
Como estamos interesados en el departamento Bolivar unicamente, necesitamos crear una unión espacial:
sf.cities.joined <- st_join(sf.cities, municipios, join = st_within)
sf.cities.joined
## Simple feature collection with 1102 features and 10 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -81.7006 ymin: -4.215 xmax: -67.4858 ymax: 13.3817
## Geodetic CRS: WGS 84
## # A tibble: 1,102 × 11
## city country iso2 admin…¹ capital popul…² popul…³ geometry
## * <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <POINT [°]>
## 1 Bogo… Colomb… CO Bogotá primary 9464000 7963000 (-74.0705 4.6126)
## 2 Mede… Colomb… CO Antioq… admin 2529403 2529403 (-75.5748 6.2447)
## 3 Cali Colomb… CO Valle … admin 2471474 2471474 (-76.5197 3.44)
## 4 Barr… Colomb… CO Atlánt… admin 1274250 1274250 (-74.7964 10.9639)
## 5 Cart… Colomb… CO Bolívar admin 1036412 1036412 (-75.5253 10.4236)
## 6 Soac… Colomb… CO Cundin… minor 995268 995268 (-74.2144 4.5781)
## 7 Pale… Colomb… CO Huila minor 800000 800000 (-75.4339 2.8883)
## 8 Cúcu… Colomb… CO Norte … admin 750000 750000 (-72.5047 7.9075)
## 9 Sole… Colomb… CO Atlánt… minor 698852 342556 (-74.77 10.92)
## 10 Pere… Colomb… CO Risara… admin 590554 590554 (-75.6946 4.8143)
## # … with 1,092 more rows, 3 more variables: MPIO_CCDGO <chr>, MPIO_CNMBR <chr>,
## # MPIO_NAREA <dbl>, and abbreviated variable names ¹admin_name, ²population,
## # ³population_proper
Ahora, vamos a filtrar las filas que corresponden a nuestro departamento Bolivar
bolivar.cities = dplyr::filter(sf.cities.joined, admin_name=="Bolívar")
bolivar.cities
## Simple feature collection with 46 features and 10 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -75.5253 ymin: 7.3761 xmax: -73.8222 ymax: 10.6039
## Geodetic CRS: WGS 84
## # A tibble: 46 × 11
## city country iso2 admin…¹ capital popul…² popul…³ geometry
## * <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <POINT [°]>
## 1 Cart… Colomb… CO Bolívar admin 1036412 1036412 (-75.5253 10.4236)
## 2 Maga… Colomb… CO Bolívar minor 123906 123906 (-74.7594 9.2467)
## 3 El C… Colomb… CO Bolívar minor 78729 78729 (-75.1167 9.7167)
## 4 Arjo… Colomb… CO Bolívar minor 78070 78070 (-75.3447 10.255)
## 5 Turb… Colomb… CO Bolívar minor 76218 76218 (-75.4142 10.3319)
## 6 Marí… Colomb… CO Bolívar minor 49462 49462 (-75.2986 9.9811)
## 7 Sant… Colomb… CO Bolívar minor 46017 46017 (-74.0533 7.9633)
## 8 San … Colomb… CO Bolívar minor 36341 36341 (-73.9231 7.4764)
## 9 San … Colomb… CO Bolívar minor 34012 34012 (-75.0811 9.9522)
## 10 Pini… Colomb… CO Bolívar minor 24923 24923 (-74.4619 8.915)
## # … with 36 more rows, 3 more variables: MPIO_CCDGO <chr>, MPIO_CNMBR <chr>,
## # MPIO_NAREA <dbl>, and abbreviated variable names ¹admin_name, ²population,
## # ³population_proper
Obtuvimos 46 ciudades ubicadas en Bolivar
Ahora, se realizará un mapa de coropletas de estos datos. Usaremos las bibliotecas tmap, ggplot2 y classInt.
library(tmap)
library (ggplot2)
library(ggrepel)
library (classInt)
Recordemos que el objeto municipios no tiene atributos EVA. En cambio, los objetos Tuberculos y platano, que contienen estadísticas de cultivo, es un objeto no espacial. Nuestra próxima tarea es unir el objeto de estadísticas a los objetos espaciales para tener los datos relevantes en un solo objeto.
Para poder realizar la unión, necesitamos una clave compartida, es decir, un atributo común. En este caso lo tenemos en ambos objetos, ese es el código municipal. Sin embargo, tenga en cuenta que tanto sus nombres como sus tipos de datos son diferentes.
class(TYP$COD_MUN)
## [1] "numeric"
class(municipios$MPIO_CCDGO)
## [1] "character"
Por lo tanto, tenemos que arreglar esto:
TYP$COD_MUN = as.character(TYP$COD_MUN)
Ahora, estamos listos para hacer una unión
library(dplyr)
munic_TYP = left_join(municipios, TYP, by = c("MPIO_CCDGO" = "COD_MUN"))
Cual es el resultado?
munic_TYP
## Simple feature collection with 46 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -76.19063 ymin: 6.99916 xmax: -73.74578 ymax: 10.80147
## Geodetic CRS: WGS 84
## First 10 features:
## MPIO_CCDGO MPIO_CNMBR MPIO_NAREA MUNICIPIO
## 1 13001 CARTAGENA DE INDIAS 593.2364 CARTAGENA DE INDIAS
## 2 13006 ACHÍ 951.7664 ACHI
## 3 13030 ALTOS DEL ROSARIO 303.7462 ALTOS DEL ROSARIO
## 4 13042 ARENAL 461.9323 ARENAL
## 5 13052 ARJONA 589.5791 ARJONA
## 6 13062 ARROYOHONDO 163.8084 ARROYOHONDO
## 7 13074 BARRANCO DE LOBA 430.7295 BARRANCO DE LOBA
## 8 13140 CALAMAR 255.3533 CALAMAR
## 9 13160 CANTAGALLO 881.4568 CANTAGALLO
## 10 13188 CICUCO 132.1484 CICUCO
## GRUPO_CULTIVO max_prod geometry
## 1 TUBERCULOS Y PLATANOS 7150 MULTIPOLYGON (((-75.29333 1...
## 2 TUBERCULOS Y PLATANOS 3000 MULTIPOLYGON (((-74.53501 8...
## 3 TUBERCULOS Y PLATANOS 1000 MULTIPOLYGON (((-74.11309 8...
## 4 TUBERCULOS Y PLATANOS 1200 MULTIPOLYGON (((-73.94174 8...
## 5 TUBERCULOS Y PLATANOS 7800 MULTIPOLYGON (((-75.30055 1...
## 6 TUBERCULOS Y PLATANOS 2400 MULTIPOLYGON (((-74.98125 1...
## 7 TUBERCULOS Y PLATANOS 4000 MULTIPOLYGON (((-74.1041 8....
## 8 TUBERCULOS Y PLATANOS 4900 MULTIPOLYGON (((-75.00496 1...
## 9 TUBERCULOS Y PLATANOS 6500 MULTIPOLYGON (((-73.89546 7...
## 10 TUBERCULOS Y PLATANOS 2150 MULTIPOLYGON (((-74.67303 9...
breaks <- classIntervals(munic_TYP$max_prod, n = 6, style = 'fisher')
lab_vec <- vector(length = length(breaks$brks)-1)
rounded_breaks <- round(breaks$brks,2)
lab_vec[1] <- paste0('[', rounded_breaks[1],' - ', rounded_breaks[2],']')
for(i in 2:(length(breaks$brks) - 1)){
lab_vec[i] <- paste0('(',rounded_breaks[i], ' - ', rounded_breaks[i+1], ']')
}
Ahora el mapa estático
munic_TYP <- munic_TYP %>%
mutate(faktor_class = factor(cut(max_prod, breaks$brks, include.lowest = T), labels = lab_vec))
# change attribute name
munic_TYP$Produccion = munic_TYP$faktor_class
munic_TYP$mid <- sf::st_centroid(munic_TYP$geometry)
library(sf)
LONG = st_coordinates(munic_TYP$mid)[,1]
LAT = st_coordinates(munic_TYP$mid)[,2]
library(ggplot2)
library(ggrepel)
ggplot(data = munic_TYP) +
geom_sf(aes(fill = Produccion)) +
geom_label_repel(aes(x = LONG, y = LAT, label = MPIO_CNMBR),
label.padding = unit(0.05,"lines"),
label.r = unit(0.025, "lines"),
label.size = 0.05)
## Warning: ggrepel: 23 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
###Ahora un nuevo mapa para el segundo grupo más grande de cultivos Aquí, utilizaremos los datos de EVA para el grupo de “oleaginosas”, que representa la segunda mayor producción en 2018 en Bolivar.
Necesitamos realizar pasos similares a los anteriores:
library(tidyverse)
(oleag = read_csv("c:/cuaderno2R/OLEAGINOSAS2018.csv",show_col_types = FALSE))
## # A tibble: 16 × 4
## COD_MUN MUNICIPIO GRUPO_CULTIVO max_prod
## <dbl> <chr> <chr> <dbl>
## 1 13670 SAN PABLO OLEAGINOSAS 40511
## 2 13442 MARIA LA BAJA OLEAGINOSAS 34202
## 3 13744 SIMITI OLEAGINOSAS 19238
## 4 13580 REGIDOR OLEAGINOSAS 18000
## 5 13600 RIO VIEJO OLEAGINOSAS 9000
## 6 13433 MAHATES OLEAGINOSAS 5334
## 7 13268 EL PEÑON OLEAGINOSAS 3560
## 8 13473 MORALES OLEAGINOSAS 2034
## 9 13894 ZAMBRANO OLEAGINOSAS 1650
## 10 13490 NOROSI OLEAGINOSAS 1085
## 11 13160 CANTAGALLO OLEAGINOSAS 1055
## 12 13212 CORDOBA OLEAGINOSAS 960
## 13 13052 ARJONA OLEAGINOSAS 777
## 14 13673 SANTA CATALINA OLEAGINOSAS 407
## 15 13042 ARENAL OLEAGINOSAS 373
## 16 13836 TURBACO OLEAGINOSAS 0
oleag$COD_MUN = as.character(oleag$COD_MUN)
library(dplyr)
munic_oleag =left_join (municipios, oleag, by = c("MPIO_CCDGO" = "COD_MUN"))
munic_oleag
## Simple feature collection with 46 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -76.19063 ymin: 6.99916 xmax: -73.74578 ymax: 10.80147
## Geodetic CRS: WGS 84
## First 10 features:
## MPIO_CCDGO MPIO_CNMBR MPIO_NAREA MUNICIPIO GRUPO_CULTIVO max_prod
## 1 13001 CARTAGENA DE INDIAS 593.2364 <NA> <NA> NA
## 2 13006 ACHÍ 951.7664 <NA> <NA> NA
## 3 13030 ALTOS DEL ROSARIO 303.7462 <NA> <NA> NA
## 4 13042 ARENAL 461.9323 ARENAL OLEAGINOSAS 373
## 5 13052 ARJONA 589.5791 ARJONA OLEAGINOSAS 777
## 6 13062 ARROYOHONDO 163.8084 <NA> <NA> NA
## 7 13074 BARRANCO DE LOBA 430.7295 <NA> <NA> NA
## 8 13140 CALAMAR 255.3533 <NA> <NA> NA
## 9 13160 CANTAGALLO 881.4568 CANTAGALLO OLEAGINOSAS 1055
## 10 13188 CICUCO 132.1484 <NA> <NA> NA
## geometry
## 1 MULTIPOLYGON (((-75.29333 1...
## 2 MULTIPOLYGON (((-74.53501 8...
## 3 MULTIPOLYGON (((-74.11309 8...
## 4 MULTIPOLYGON (((-73.94174 8...
## 5 MULTIPOLYGON (((-75.30055 1...
## 6 MULTIPOLYGON (((-74.98125 1...
## 7 MULTIPOLYGON (((-74.1041 8....
## 8 MULTIPOLYGON (((-75.00496 1...
## 9 MULTIPOLYGON (((-73.89546 7...
## 10 MULTIPOLYGON (((-74.67303 9...
facet = "max_prod"
oleag_map =
tm_shape(munic_oleag) + tm_polygons(facet) + tm_text(text = "MPIO_CNMBR", size = 0.7, fontfamily = "sans") +
tm_shape(bolivar.cities) + tm_symbols(shape = 2, col = "red", size = 0.20) +
tm_credits("Data source: UPRA (2018)", fontface = "bold") +
tm_layout(main.title = "Produccion de oleaginosas en 2018",
main.title.fontface = "bold.italic",
legend.title.fontfamily = "monospace") +
tm_scale_bar(position = c("left", "bottom"))
tmap_mode("view")
## tmap mode set to interactive viewing
oleag_map
## Credits not supported in view mode.
## Symbol shapes other than circles or icons are not supported in view mode.
##Los créditos no se admiten en el modo de visualización. ##Las formas de símbolos que no sean círculos o iconos no se admiten en el modo de vista.
###Bibliografia Lizarazo, I., 2022. Getting started with thematic maps. Available at https://rpubs.com/ials2un/thematic_maps_v2.
sessionInfo()
## R version 4.2.3 (2023-03-15 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19044)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=Spanish_Colombia.utf8 LC_CTYPE=Spanish_Colombia.utf8
## [3] LC_MONETARY=Spanish_Colombia.utf8 LC_NUMERIC=C
## [5] LC_TIME=Spanish_Colombia.utf8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] classInt_0.4-9 ggrepel_0.9.3 tmap_3.3-3 lubridate_1.9.2
## [5] forcats_1.0.0 stringr_1.5.0 purrr_1.0.1 tidyr_1.3.0
## [9] tibble_3.2.0 ggplot2_3.4.2 tidyverse_2.0.0 readr_2.1.4
## [13] dplyr_1.1.0 sf_1.0-12
##
## loaded via a namespace (and not attached):
## [1] sass_0.4.5 bit64_4.0.5 vroom_1.6.1
## [4] jsonlite_1.8.4 viridisLite_0.4.1 bslib_0.4.2
## [7] highr_0.10 sp_1.6-0 yaml_2.3.7
## [10] lattice_0.20-45 pillar_1.8.1 glue_1.6.2
## [13] digest_0.6.31 RColorBrewer_1.1-3 leaflet.providers_1.9.0
## [16] colorspace_2.1-0 htmltools_0.5.4 XML_3.99-0.14
## [19] pkgconfig_2.0.3 raster_3.6-20 stars_0.6-1
## [22] s2_1.1.3 scales_1.2.1 terra_1.7-29
## [25] tzdb_0.3.0 timechange_0.2.0 proxy_0.4-27
## [28] farver_2.1.1 generics_0.1.3 ellipsis_0.3.2
## [31] cachem_1.0.7 withr_2.5.0 leafsync_0.1.0
## [34] cli_3.6.0 mime_0.12 magrittr_2.0.3
## [37] crayon_1.5.2 evaluate_0.20 fansi_1.0.4
## [40] lwgeom_0.2-11 class_7.3-21 tools_4.2.3
## [43] hms_1.1.2 lifecycle_1.0.3 munsell_0.5.0
## [46] compiler_4.2.3 jquerylib_0.1.4 e1071_1.7-13
## [49] rlang_1.1.0 units_0.8-2 grid_4.2.3
## [52] tmaptools_3.1-1 dichromat_2.0-0.1 rstudioapi_0.14
## [55] htmlwidgets_1.6.2 crosstalk_1.2.0 leafem_0.2.0
## [58] base64enc_0.1-3 rmarkdown_2.20 wk_0.7.2
## [61] codetools_0.2-19 gtable_0.3.2 abind_1.4-5
## [64] DBI_1.1.3 markdown_1.5 R6_2.5.1
## [67] knitr_1.42 fastmap_1.1.1 bit_4.0.5
## [70] utf8_1.2.3 KernSmooth_2.23-20 stringi_1.7.12
## [73] parallel_4.2.3 Rcpp_1.0.10 png_0.1-8
## [76] vctrs_0.6.0 leaflet_2.1.2 tidyselect_1.2.0
## [79] xfun_0.37