Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the astra-sites domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the jetpack domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wpforms-lite domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wordpress-seo domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114

Notice: A função _load_textdomain_just_in_time foi chamada incorretamente. O carregamento da tradução para o domínio astra foi ativado muito cedo. Isso geralmente é um indicador de que algum código no plugin ou tema está sendo executado muito cedo. As traduções devem ser carregadas na ação init ou mais tarde. Leia como Depurar o WordPress para mais informações. (Esta mensagem foi adicionada na versão 6.7.0.) in /home/statplace/public_html/site/wp-includes/functions.php on line 6114
Construa mapas com o pacote Leaflet - Statplace
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 é o pacote Leaflet. 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 do pacote Leaflet 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:
Compartilhar no facebook
Compartilhar no twitter
Compartilhar no linkedin

Deixe um comentário

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

Related Posts