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:
- Criação do mapa chamando a função
leaflet()
- Adição de camadas com as funções
addTiles()
,addMarkers()
ouaddPolygons()
- 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
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)
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)