O objetivo deste texto é buscar um shapfile do mapa do brazil com os municípios e descobrir como vincular dados para exposição gráfica.
Após uma rápida pesquisa, encontrei, no google, o pacote brazilmaps com mapas do Brasil de 2016, disponibilizados pelo IBGE.
São três funções que parecem ser as mais utilizáveis: get_brmap
, join_data
e plot_brmap
. Junto com o pacote, existem alguns dados em formato facilitado para vincular ao mapa.
Assim, primeiramente vou carregar os pacotes:
#install.packages("brazilmaps")
library(brazilmaps)
library(ggplot2)
library(sf)
library(tidyverse)
library(sp)
Em seguida, obter o mapa com a função get_brmap
.
A função possibilita diferentes níveis geográficos(geo =
c("Brazil",
"Region"
,"State"
,"MesoRegion"
,"MicroRegion"
,"City")
), além de possibilitar filtrar regiões, estados … (geo.filter =
). Para tanto, deve se utilizar os códigos censitários. Por exemplo: geo.filter = list(Region = 5)
1.
BR <- get_brmap("City")
class(BR)
## [1] "sf" "data.frame"
O próximo passo é gerar o mapa com a função plot_brmap
, que gera um mapa a partir do pacote ggplot2
. Por isso, é aconselhável carregar o pacote já desde o início. Como são mais de cinco mil municípios, o mapa pode demorar um pouco.
plot_brmap(BR)
Adicionando variáveis
Como mencionado, o pacote conta com algumas bases de dados disponíveis e já formatadas para vincular ao mapa. Estas bases são dados de mortes(deaths
), índice de gini (gini2015
) e população (pop2017
). Entretanto, quando fiz as simulações, apenas a base de dados pop2017
funcionou.
head(pop2017)
## mun nome_mun pop2017
## 1 1100015 Alta Floresta D\\'Oeste 25437
## 2 1100023 Ariquemes 107345
## 3 1100031 Cabixi 6224
## 4 1100049 Cacoal 88507
## 5 1100056 Cerejeiras 17934
## 6 1100064 Colorado do Oeste 18467
Para inserir os dados no mapa, o pacote possibilita uma junção das bases pelos códigos, utilizando as opções data_to_join
, join_by
e var
:
data("pop2017")
mapa1 <- plot_brmap(BR, data_to_join = pop2017,
join_by = c("City" = "mun"),
var = "pop2017")
mapa1
Dificuldades
Algumas dificuldades surgiram durante a utilização:
Primeiro, para um mapa do Brasil inteiro, as linhas que dividem os municípios acabam impossibilitando de ver as informações;
Outro fator que impossibilita a visualização dos dados é a baixa frequência da escala da legenda;
Lidando com as dificuldades
1. Linhas dos municípios
Encontrei duas alternativas para o problema da visualização dos municípios. A primeira consiste em utilizar a opção geo.filter=
, dentro da função get_brmap
, para uma região, ou estado específico, o que aumentará o tamanho da visualização. Caso isso não seja suficiente, ou seja necessário representar o mapa do país inteiro, a sugestão é alterar as linhas para ficarem transparentes. Desta forma, será visualizado apenas o preenchimento da área dos municípios.
2. Transformação dos dados
Como a distribuição da população dos municípios tem uma série de outliers, São Paulo em especial, a sua escala fica comprometida. A melhor forma de possibilitar a visualização é logaritmizando os dados populacionais.
Ajustes
Abaixo seguem as alterações. Para melhorar a visualização dos municípios, filtrei para mostrar apenas o estado de São Paulo. Já para melhorar a visualização das escalas, logaritimizei os dados populacionais.
BR <- get_brmap("City", geo.filter = list(State = 31) )
pop2017$logpop <- log(pop2017$pop2017)
plot_brmap(BR, data_to_join = pop2017,
join_by = c("City" = "mun"),
var = "logpop")
Note que, mesmo restringindo ao estado de São Paulo, alguns municípios permanecem de difícil visualização. Ainda acho que a melhor solução seria deixar as linhas sem cor, mas não consegui fazer isso pela função plot_brmap
. Embora ela permita adicionar outras camadas do pacote ggplot2
, não soube editar esse elemento.
Uma solução que utilizei em um em minha tese, foi pegar o mapa no formato sf
do pacote e gerá-lo no ggplot2
. Isso abre mais possibilidades de manipulação e deixa de lado as funcionalidades do pacote.De toda forma, o pacote é bastante prático para elaborações rápidas, bem como para obtenção dos mapas sem sair do ambiente do R.
- Para mais detalhes é importante ver a ajuda da função,
?get_brmap
. [return]