Gráficos miojo: Mapas temáticos do Brasil em 3 minutos ou menos

Por Fernando 04/05/2017

De todas as visualizações, mapas são aquelas que impressionam mais. É muito mais fácil alguém se maravilhar com o mapa mais simples do que com o ggplot2 mais complicado. Felizmente, considerando essa comparação, o R disponibiliza muitos recursos para construir mapas.

Dentro do tidyverse é possível construir mapas usando a função geom_map, do pacote ggplot2, mas está fora do escopo deste post explicar como ela funciona. Aqui vamos apenas descobrir como usá-la para agilizar a construção de um gráfico simples.

Na Associação Brasileira de Jurimetria, nós temos um tipo favorito de mapa. Tipicamente temos interesse em diferenciar as unidades da federação por alguma variável quantitativa, seja ela categorizada ou não, e a ferramenta certa para isso é um mapa temático dos estados. Essa necessidade é tão frequente que as ferramentas mais importantes para construção desses gráficos estão num pacote chamado abjData.

As coisas estão dispostas de tal forma que, a partir de uma tabela que relaciona uma variavel e os estados brasileiros, construir um gráfico similar ao mapa abaixo pode ser feito chamando apenas uma função1.

dataset %>% 
  constroi_mapa_tematico()

Neste post, vamos construir a função constroi_mapa_tematico e aprender a implementar alguns tweaks.

A função

O geom_map é uma função do ggplot2 que renderiza coordenadas de mapas. Ela pega um data_frame especial que diz quais coordenadas usar (e como usá-las) e plota no gráfico. Esse mapa normalmente é obtido aplicando a função fortify em um conjunto de dados geospaciais.

Para os gráficos que vamos construir aqui, não vai ser necessário aplicar a função fortify, pois o resultado desse passo já está disponível no pacote abjData e ele é o data_frame br_uf_map. Tudo que vamos precisar fazer é pedir que o geom_map use esse cara.

devtools::install_github('abjur/abjData')
#instala o pacote
constroi_mapa_tematico <- function(dataset){
  dataset %>% 
  inner_join(abjData::br_uf_map) %>% {
    ggplot(.) +
    geom_map(aes(x = long, y = lat,
                 map_id = id, fill = variavel),
             color = 'gray30', map = ., data = .) + 
    theme_void() +
    coord_equal()
  }
}

O input da função é uma tabela dataset com duas colunas

  • id, que representa as unidades da federação abreviada;
  • variavel, variável numérica (ou fator) que vai colorir o gráfico.

No exemplo acima essa tabela era:

dataset %>% 
  head(10)
FALSE # A tibble: 10 x 2
FALSE       id  variavel
FALSE    <chr>     <dbl>
FALSE  1    TO  94.93079
FALSE  2    SP 278.79676
FALSE  3    SE  35.50231
FALSE  4    SC 204.85650
FALSE  5    RS 169.19369
FALSE  6    RR 114.90413
FALSE  7    RO 152.47085
FALSE  8    RN  26.22847
FALSE  9    RJ 107.42855
FALSE 10    PR 148.47011

Os tweaks

A função constroi_mapa_tematico devolve um ggplot2, então ainda dá pra mexer em alguns parâmetros estéticos após a construção do mapa. As três coisas que vamos aprender a fazer são

  1. Adicionar labels e títulos
dataset %>% 
  constroi_mapa_tematico() +
  ggtitle("Roubos de carros no Brasil em 2014") +
  scale_fill_continuous(name = "Taxa/100 mil hab.")

  1. Alterar as cores da escala
dataset %>% 
  constroi_mapa_tematico() +
  ggtitle("Roubos de carros no Brasil em 2014") +
  scale_fill_continuous(name = "Taxa/100 mil hab.", low = 'white', high = 'red',
                        na.value = 'white')

  1. Alterar valores
dataset %>% 
  constroi_mapa_tematico() +
  ggtitle("Roubos de carros no Brasil em 2014") +
  scale_fill_continuous(name = "Taxa/100 mil hab.", low = 'green', high = 'red',
                        na.value = 'white', breaks = seq(0,300,50))


  1. Os dados foram levantados pelo Fórum Brasileiro de Segurança Pública e obtidos via download no seu site http://www.forumseguranca.org.br/estatisticas/introducao/.

comments powered by Disqus