Há duas possibilidades de se trabalhar com mapas no D3plusR
:
jsonlite
A segunda opção não funciona para visualizações que serão geradas diretamente no Viewer do RStudio. Isto ocorre porque o htmlwidget gerado diretamente no RStudio é criado em um arquivo temporário e, por questões de segurança, não tem permissão para acessar arquivos de outras pastas. Nesse caso, deve-se usar a primeira solução.
O outro ponto importante é formato do arquivo do mapa. O D3plus precisa de um arquivo no formato topojson
. O pacote D3plusR fornece um arquivo para o mapa mundial. A localização desse arquivo pode ser obtida da seguinte forma:
library(dplyr)
library(D3plusR)
mapa <- system.file("extdata", "countries.topojson", package = "D3plusR")
Vamos criar um exemplo usando a primeira opção:
# Carregar os dados do mapa
# O identificador do mapa é o ISO A3 de cada país
mapa <- jsonlite::fromJSON(mapa, simplifyVector = F)
# Exportações Brasíleiras de 2015 por Destino
data("bra_exp_2015")
d3plus(data = bra_exp_2015,
type = "geo_map",
id = "Partner.ISO",
width = "100%",
height = 500) %>%
d3plusCoords(mapa, projection = "equirectangular") %>%
d3plusColor(value = "Trade.Value..US..") %>%
d3plusTooltip(value = c("Trade.Value..US..", "Partner.ISO")) %>%
d3plusLabels(FALSE) %>%
d3plusText("Partner")
Utilizando a segunda opção:
d3plus(data = bra_exp_2015,
type = "geo_map",
id = "Partner.ISO",
width = "100%",
height = 500) %>%
d3plusCoords(value = "countries.topojson", projection = "equirectangular") %>%
d3plusColor(value = "Trade.Value..US..") %>%
d3plusTooltip(value = c("Trade.Value..US..", "Partner.ISO")) %>%
d3plusLabels(FALSE) %>%
d3plusText("Partner") %>%
d3plusZoom(value = TRUE, scroll = FALSE)
É importante que o arquivo
countries.topojson
esteja em um caminho relativo em relação ao endereço do html gerado pelo rmarkdown ou da pastawww
de uma aplicação Shiny.
rem_rais_mg_2015 <- read.csv2('dados/rem_rais_mg_2015.csv',
encoding = 'latin1')
rem_rais_mg_2015$id <- as.character(rem_rais_mg_2015$id)
d3plus(data = rem_rais_mg_2015, type = "geo_map",
id = "id",
width = "100%",
height = 500,
locale = "pt_BR",
currency = "R$",
currency_var = "mediana",
number_text = c("Mil", "Milhão", "Milhões", "Bilhão", "Bilhões"),
elementId = "mg") %>%
d3plusCoords('mapas/mg_munic.json', projection = "equirectangular") %>%
d3plusLabels(FALSE) %>%
d3plusColor(value = "mediana") %>%
d3plusTooltip(c("NM_MUNICIP", "mediana")) %>%
d3plusText("NM_MUNICIP")