artigos2-32

Construa mapas com o pacote Leaflet

Leaflet é uma das bibliotecas JavaScript mais populares para a criação de mapas interativos. Esse pacote permite gerar mapas no R, para usar em documentos RMarkdown e Shiny.

Uma das bibliotecas JavaScript mais populares para a criação de mapas interativos. Esse pacote permite gerar esses mapas de forma direta no R, para usar em documentos RMarkdown e Shiny.

Instalação do pacote Leaflet

Para instalar este pacote R, execute este comando:

install.packages("leaflet")

Como utilizar

Visando um exemplo básico, a criação de um mapa por meio desse pacote seguiria os seguintes passos:

  1. Criação do mapa chamando a função leaflet()
  2. Adição de camadas com as funções addTiles()addMarkers() ou addPolygons()
  3. Impressão do mapa
library(leaflet)

mapa <- leaflet() %>% 
  addTiles() %>%  # Adicionando um recorte de mapa do OpenStreetMap
  addMarkers(lng=-43.940925, lat=-19.929799, popup="Oper")
mapa  # Imprimindo o mapa
mapa com a impressão de camadas usando pacote leaflet

Exemplo prático

Faremos agora um exemplo de aplicação do pacote Leaflet onde criaremos um mapa com a porcentagem de municípios com rede de esgoto em cada estado do Brasil.

Esboço dos mapas

Primeiramente precisamos carregar um esboço do mapa do Brasil com separação por estados por meio do pacote brazilmaps.

# Carregando o mapa do Brasil com o pacote brazilmaps
mapa <- brazilmaps::get_brmap("State")

mapa <- read_state(showProgress = FALSE) 

Dados necessários

Montaremos agora um data frame com duas colunas, uma referente ao código de cada estado e outra referente ao valor em decimal correspondente à porcentagem de munícipios com saneamento básico em cada estado.

acesso_san <- data.frame(code_state = c(12, 27, 16, 13, 29, 23, 53, 32, 52, 21, 51, 50, 31, 15, 
                                   25, 41, 26, 22, 33, 24, 43, 11, 14, 42, 35, 28, 17), 
                         com_rede = c(0.273, 0.412, 0.313, 0.177, 0.513, 0.696, 1.000, 0.974, 0.280, 0.065, 
                                      0.191, 0.449, 0.916, 0.063, 0.731, 0.421, 0.881, 0.045, 0.924, 0.353, 
                                      0.405, 0.096, 0.400, 0.352, 0.998, 0.347, 0.129))

Coordenadas Geográficas

Agora precisamos extrair as coordenadas geográficas de onde estão localizados os dados que queremos apresentar. Utilizamos o comando st_coordinates() para obter um data frame com as coordenadas.

coord_pontos <- mapa %>% 
                  left_join(acesso_san, by = "code_state") %>% 
                  mutate(com_rede = 100*com_rede) %>% 
                  st_centroid()

dados <- data.frame(st_coordinates(coord_pontos), 
           com_rede = coord_pontos$com_rede, 
           UF = coord_pontos$name_state)

Obtemos então os seguintes dados, onde as colunas X e Y correspondem às latitudes e longitudes respectivamente.

head(dados)
##           X          Y com_rede       UF
## 1 -62.84416 -10.911831      9.6 Rondônia
## 2 -70.47336  -9.212742     27.3     Acre
## 3 -64.65304  -4.154146     17.7 Amazonas
## 4 -61.39928   2.084252     40.0  Roraima
## 5 -53.06406  -3.974674      6.3     Pará
## 6 -51.95583   1.443336     31.3    Amapá

Criação dos mapas

Em seguida, com as informações anteriores, construiremos o gráfico onde teremos círculos com raios proporcionais à porcentagem de municípios com rede de esgoto em cada UF.

  leaflet(dados) %>% 
    addTiles() %>%
    addCircleMarkers(~ X, ~ Y,
                     label = ~ as.character(paste0(UF, ": ", com_rede, "%")),
                     labelOptions = labelOptions(textsize = "13px"),
                     radius = ~ sqrt(com_rede),
                     fillOpacity = 0.5)
mapa dos municípios com rede de esgoto em cada UF usando pacote leaflet

Mapas de calor (heatmaps)

Podemos criar também heatmaps para exibir esses dados, tonalizando cada estado conforme a porcentagem correspondente. Sendo assim, quanto maior a cobertura de saneamento básico em um estado mais vibrante será a sua coloração.

Delimitação dos estados

Para construir esse gráfico precisamos transformar as informações extraídas do mapa do Brasil em dados geométricos e unir com a base de dados que contém as informações que serão exibidas.

geo <- st_as_sf(mapa)%>%
  st_transform(4326)

dados_final <- left_join(geo,dados, by = c("name_state" = "UF"))

Criação dos mapas

E por fim construímos o mapa e a paleta de cores que irá tonalizá-lo.

#Paleta de cores com tons de azul
cores <- colorNumeric(palette = "Blues", domain = dados$com_rede)

leaflet(dados_final) %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addPolygons(data = dados_final,
              smoothFactor = 0.5,
              fillOpacity = 0.5,
              weight = 0.5,
              color = ~cores(com_rede),
              opacity = 0.8,
              highlightOptions = highlightOptions(color = "white",
                                                  weight = 2,
                                                  bringToFront = TRUE),
              popup = ~paste0(sep = " ",
                              "<b>Estado: </b>", name_state, "<br>",
                              "<b>Municípios com rede de esgoto: </b>", com_rede,"%"),
              label = ~name_state) 
heatmap usando pacote leaflet
Share the Post:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Related Posts