Oficina sobre Mapas
15/06/2022
Carregar os pacotes
library(ggplot2)
Download dos dados
# para criar a pasta de download
::dir_create("dados/")
fs
# URL para baixar
<- "https://app.anm.gov.br/SIGBM/Publico/ClassificacaoNacionalDaBarragem/ExportarExcel"
url_sigbm
# Baixar o arquivo excel
::POST(url = url_sigbm, httr::write_disk("dados/sigbm.xlsx")) httr
Importar os dados brutos
<- readxl::read_xlsx("dados/sigbm.xlsx", skip = 4) sigbm_bruto
Organização
<- sigbm_bruto |>
sigbm ::clean_names() |>
janitor::mutate(
dplyrlat = parzer::parse_lat(latitude),
long = parzer::parse_lon(longitude),
.after = longitude
)
Objetivo 1: Mapa estático com ggplot2
Mapa temático do Brasil, por estado, represente a qnt de barragens no estado.
Fazer a contagem:
<- sigbm |>
quantidade_por_uf ::count(uf, name = "qtd_barragens") dplyr
- Buscar a delimitação dos estados!
<- geobr::read_state(year = 2020) br_estados
FALSE
|
| | 0%
|
|=== | 4%
|
|===== | 7%
|
|======== | 11%
|
|========== | 15%
|
|============= | 19%
|
|================ | 22%
|
|================== | 26%
|
|===================== | 30%
|
|======================= | 33%
|
|========================== | 37%
|
|============================= | 41%
|
|=============================== | 44%
|
|================================== | 48%
|
|==================================== | 52%
|
|======================================= | 56%
|
|========================================= | 59%
|
|============================================ | 63%
|
|=============================================== | 67%
|
|================================================= | 70%
|
|==================================================== | 74%
|
|====================================================== | 78%
|
|========================================================= | 81%
|
|============================================================ | 85%
|
|============================================================== | 89%
|
|================================================================= | 93%
|
|=================================================================== | 96%
|
|======================================================================| 100%
# #readr::write_rds(br_estados, "dados/geobr_estados.Rds")
# #br_estados <- readr::read_rds("dados/geobr_estados.Rds")
::glimpse(br_estados) dplyr
FALSE Rows: 27
FALSE Columns: 6
FALSE $ code_state <dbl> 11, 12, 13, 14, 15, 16, 17, 21, 22, 23, 24, 25, 26, 27, 2…
FALSE $ abbrev_state <chr> "RO", "AC", "AM", "RR", "PA", "AP", "TO", "MA", "PI", "CE…
FALSE $ name_state <chr> "Rondônia", "Acre", "Amazônas", "Roraima", "Pará", "Amapá…
FALSE $ code_region <dbl> 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, …
FALSE $ name_region <chr> "Norte", "Norte", "Norte", "Norte", "Norte", "Norte", "No…
FALSE $ geom <MULTIPOLYGON [°]> MULTIPOLYGON (((-65.3815 -1..., MULTIPOLYGON…
- Unir a base de estados com a base de quantidade de barragens:
<-
tabela_com_dados_uf ::left_join(br_estados, quantidade_por_uf,
dplyrby = c("abbrev_state" = "uf")) |>
::st_simplify(dTolerance = 5000)
sf
::glimpse(tabela_com_dados_uf) dplyr
## Rows: 27
## Columns: 7
## $ code_state <dbl> 11, 12, 13, 14, 15, 16, 17, 21, 22, 23, 24, 25, 26, 27, …
## $ abbrev_state <chr> "RO", "AC", "AM", "RR", "PA", "AP", "TO", "MA", "PI", "C…
## $ name_state <chr> "Rondônia", "Acre", "Amazônas", "Roraima", "Pará", "Amap…
## $ code_region <dbl> 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3,…
## $ name_region <chr> "Norte", "Norte", "Norte", "Norte", "Norte", "Norte", "N…
## $ qtd_barragens <int> 36, NA, 15, NA, 114, 18, 7, 2, 2, NA, NA, 1, NA, 1, 3, 8…
## $ geom <MULTIPOLYGON [°]> MULTIPOLYGON (((-65.33169 -..., MULTIPOLYGO…
|>
tabela_com_dados_uf ggplot() +
geom_sf()
Complementando o gráfico:
|>
tabela_com_dados_uf ggplot() +
geom_sf(aes(fill = qtd_barragens)) +
scale_fill_viridis_c() +
labs(fill = "Quantidade de\nBarragens",
title = "Quantidade de barragens de mineração por estado no Brasil",
caption = "Dados obtidos no SIGBM em 15/06/2022.") +
theme_light()
Objetivo 2: Mapa de pontos!
library(leaflet)
|>
sigbm leaflet() |>
#addTiles() |>
addProviderTiles("Esri.WorldImagery") |>
addMarkers(~ long, ~lat,
clusterOptions = markerClusterOptions())
Objetivo 3 - Exemplo para a Tainá!
- Cria um df com os valores sumarizados:
<- sigbm |>
sigbm_summ ::mutate(
dplyrvolume_atual_m3 = readr::parse_number(
volume_atual_m3, locale = readr::locale(
decimal_mark = ",",
grouping_mark = "."
)
)|>
) ::group_by(uf) |>
dplyr::summarise(
dplyrqtd_barragens = dplyr::n(),
altura_media = mean(
na.rm = TRUE
altura_atual_m,
),emergencia = sum(
!= "Sem emergência",
nivel_de_emergencia na.rm = TRUE
),dano_alto = sum(
== "Alto",
dano_potencial_associado na.rm = TRUE
),volume = sum(
volume_atual_m3, na.rm = TRUE
) )
- Criar uma função para gerar um gráfico:
<- function(coluna, titulo) {
gera_grafico |>
br_estados ::left_join(
dplyrc("abbrev_state" = "uf")
sigbm_summ, |>
) ::st_simplify(dTolerance = 5000) |>
sf::ggplot() +
ggplot2# alternativa:
# ggplot2::aes(fill = {{coluna}}) +
::aes(fill = .data[[coluna]]) +
ggplot2::geom_sf() +
ggplot2::scale_fill_viridis_c() +
ggplot2::labs(
ggplot2title = titulo
+
) theme_light()
}
- Experimentando a função para uma variável:
gera_grafico("dano_alto", "Dano alto!")
- Iterando para várias variáveis e combinando em um gráfico:
<- list(
lista "Dano alto!" = "dano_alto",
"Emergência!!" = "emergencia",
"Altura média!!" = "altura_media",
"Volume!!" = "volume"
)
<- purrr::imap(lista, gera_grafico)
lista_graficos
::wrap_plots(
patchwork
lista_graficos, ncol = 2
)
Dúvida da Laila
- Pacote para buscar a delimitação dos paÃses
library("rnaturalearth")
library("rnaturalearthdata")
<- ne_countries(scale = "medium", returnclass = "sf")
world class(world)
## [1] "sf" "data.frame"
ggplot(data = world) +
geom_sf()