# Para instalar o D3plusR:
# devtools::install_github('paulofelipe/D3plusR')
library(geobr)
library(geojsonio)
library(sf)
library(D3plusR)
library(readxl)
library(janitor)
library(dplyr)
Visualizações de mapas interativos com o D3plusR
Integrando o D3plusR com o geobr
Introdução
Este post tem o objetivo de mostrar a solução encontrada para uma questão levantada no repositório do D3plusR
(aqui). O autor da issue gostaria de saber se seria possível integrar as bases de dados espaciais do pacote geobr
com o D3plusR
. A resposta é sim! E é isso que vamos ver neste post. Apenas uma ressalva, como não sou especialista em dados espaciais, é possível que essa não seja a solução mais eficiente para o problema. Se você tem conhecimento sobre uma solução mais elegante, você pode compartilhar aqui ou no github.
Pacotes
Abaixo, estão listados os pacotes utilizados neste post.
Dados
Para o exemplo, irei utilizar os dados do Censo 2010 por microrregião disponibilizados pelo IPEA (Ipea Geo). Especificamente, iremos calcular a proporção da população rural em relação ao total por microrregião.
<- tempfile()
temp_file download.file(
url = "https://www.ipea.gov.br/ipeageo/arquivos/bases/IBGE_CIDADES_MICROREGIAO.xls",
destfile = temp_file,
mode = "wb"
)<- read_excel(
dados_censo2010 path = temp_file,
sheet = "Censo 2010 (Sinopse)"
%>%
) clean_names() %>%
select(
codigo_da_microregiao, populacao_residente, populacao_residente_rural%>%
) mutate(prop_rural = populacao_residente_rural / populacao_residente * 100)
Obtendo o mapa
Para a criação de um geo_map
no D3plusR
, é preciso de dados no formato topojson
. O código abaixo lê os dados espaciais para as microrregiões brasileiras e converte para o formato topojson
.
# Prepara o mapa ---------------------------------------------------------------
<- read_micro_region(year = 2010, simplified = TRUE) %>%
mapa st_transform(4326) %>%
transmute(id = code_micro, name_micro) %>%
topojson_json(
object_name = "BRMI",
geometry = "polygon",
type = "GeometryCollection",
quantization = 1e4,
crs = 4326
%>%
) fromJSON(., simplifyVector = TRUE)
# Cada "geometria" precisa ter um id. Adicionamos a partir das propriedades.
$objects$BRMI$geometries$id <-
mapa$objects$BRMI$geometries$properties$id
mapa
# Salva o mapa em um arquivo json para uso futuro sem necessidade de repetir
# o processo acima
<- write_json(mapa, "./br_micro.json") mapa
O código abaixo faz um join com as propriedades da microrregiões para adicionar os nomes de cada microrregião no data.frame dados_censo2010
.
<- read_json("./br_micro.json", simplifyVector = TRUE) mapa
Criando a visualização
O código abaixo cria a visualização usando o pacote D3plusR
. O importante é que a variável indicada como id
no data.frame dados_censo2010
tenha os mesmos códigos que estão no arquivo do mapa. No exemplo, são os códigos de microrregiões. Para mais detalhes sobre a utilização do D3plusR
, veja este tutorial.
# Join para adicionar o nome das regiões aos dados
<- dados_censo2010 %>%
dados_censo2010 left_join(
y = mapa$objects$BRMI$geometries$properties,
by = c("codigo_da_microregiao" = "id")
%>%
) rename(id = codigo_da_microregiao)
head(dados_censo2010)
# A tibble: 6 × 5
id populacao_residente populacao_residente_rural prop_rural name_micro
<dbl> <dbl> <dbl> <dbl> <chr>
1 11001 540320 85875 15.9 Porto Velho
2 11002 71369 20438 28.6 Guajará-Mirim
3 11003 171150 56535 33.0 Ariquemes
4 11004 295466 92554 31.3 Ji-Paraná
5 11005 70184 40113 57.2 Alvorada D'oes…
6 11006 228212 76457 33.5 Cacoal
d3plus(
data = dados_censo2010,
type = "geo_map",
id = "id",
width = "100%",
height = 700,
percent_var = "prop_rural",
locale = "pt_BR",
dictionary = list(prop_rural = "Proporção da população rural"),
%>%
) d3plusCoords(mapa, projection = "equirectangular") %>%
d3plusColor(value = "prop_rural") %>%
d3plusTooltip(value = "prop_rural") %>%
d3plusText(value = "name_micro") %>%
d3plusTitle(
value = "Proporção da população rural por microrregião - 2010",
font = list(size = 28, weight = 900)
)