Mapa de símbolos proporcionais no R

Thu,29 Apr, 2021

Tenho notado uma certa popularização de produtos cartográficos que, de alguma forma, têm chegado em diversas áreas: saúde, economia, ciências sociais. Eu atribuo isso à ampla divulgação das técnicas, softwares, disponibilidade de dados, a “chegada” ciência de dados e dos cientistas de dados… Embora seja importante a disseminação do conhecimento, sempre me pergunto: Qual o problema de não fazê-la adequadamente?

Digo isso lembrando das minhas aulas de cartografia temática na faculdade de Geografia na Unifal, quando estudávamos que variáveis quantitativas (ou dados de contagem ou valores absolutos, como preferir) são representadas variando o tamanho de forma geométrica. Justamente para demonstrar a proporcionalidade. Ou seja, a medida que o símbolo aumenta de tamanho, os valores do evento representado também aumentam. Eu acho isso muito intuitivo e muito importante.

Penso que, como o espaço é contínuo, ou seja, as divisões ou demarcações do espaço são imaginárias (sim, nenhuma linha de divisão existe no espaço, nós inventamos), quando expressamos números quantitativos discretos uilizando uma geometria adequada para números contínuos (usando polígonos, por exemplo), não me parece adequado. Quando uso a palavra adequado, penso que poderia usar “errado”. Enfim, mais pra frente pretendo fazer uma pequena revisão da literatura para demonstrar isso.

Para exemplificar o que estou debatendo acima, vou apresentar um solução em R, pois, neste blog, ainda em fase de teste, quero compartilhar alguns códigos de programação nesta linguagem. E sobre o assunto de produtos cartográficos, recentemente, descobri o pacote mapsf, uma evolução do cartography. Este pacote tem como objetivo permitir a obtenção de um mapa temático com uma qualidade visual similar aos que elaboramos nos sistemas de informação geográfica. Vou mostrar a montagem de um mapa simples de símbolos proporcionais quando temos dados de contagem.

Primeiro eu carrego os pacotes que usarei. já existe muito conteúdo sobre o magrittr e dplyr na internet. Prefiro focar no mapsf.

library(magrittr)
library(dplyr)
library(mapsf)

Para este exemplo, usarei a malha digital de Roraima. É uma base pequena e rápida para download pelo geobr.

mtq <- geobr::read_municipality("RR", showProgress = F) %>%
       dplyr::mutate(munic_res = as.character(substr(code_muni, 1,6))) %>%
       dplyr::select(munic_res, everything())

A partir daí, crio uma banco de dados para exemplo, simulando a distribuição de um evento ou doença qualquer. Apenas para treinar. Percebam que eu utilizo a estrutura do mapa, para randomizar os dados.

set.seed(15)


bd <- data.frame(
  munic_res = mtq$munic_res,
  num_casos = as.integer(rnorm(length(mtq$munic_res), mean = 150, sd = 88.42953)))

E agora, faço um join da base de dados com a base cartográfica. Nosso geocódigo de ligação dos dados tabulares e o mapa será o munic_res.

map <- mtq %>% dplyr::left_join(bd)

Pronto! Agora plotamos nosso mapa. O mapsf possui uma função para cada abordagem na cartografia temática como símbolos proporcionais (que usaremos aqui), mapas coropléticos, mapas de tipologia, símbolos graduados, entre outros. Aqui mostrarei uma visão mais simplificada, mas muito útil e mais elegante do que aqueles “mapas” feitos no ggplot, embora eu use muito.

# [1]
mapsf::mf_theme(x = "candy")
# [2]
map %>% 
  mapsf::mf_map() %>%
# [3]
  mapsf::mf_map(var = c("num_casos"), 
         type = "prop",
         border = "white",
         col = "#6B1767",
         lwd = 0.5,
         leg_pos = "topleft",
         leg_title = "Número de casos")
# [4]
mapsf::mf_layout(title = "Casos de doença X em Roraima",
          arrow = FALSE,
          frame = TRUE,
          credits = paste0("Visualização:\n  Denis de Oliveira Rodrigues
            Escola Nacional de Saúde Pública Sérgio Arouca\n",
                           "mapsf ",
                           packageVersion("mapsf")))
# [5]
mapsf::mf_arrow(pos ='topright', adjust = )

Bom, explicarei sucintamente as partes do código acima. Coloquei alguns marcadores numerados para facilitar a explicação. No marcador [1] defino o tema. Neste caso, usei o tema candy. No marcador [2] uso a função mf_map para plotar o mapa base. Como bem sabemos (ou deveríamos saber), a montagem de um mapa envolve várias camadas. Esta é a primeira. No marcador [3] temos mais uma camada que, neste caso, está trazendo os dados da variável num_casos e usando o tipo de mapa prop. Eu poderia usar a função mf_prop que daria no mesmo. O símbolo geométrico padrão do tipo prop é o círculo, mas é possível especificar outro. Cores, bordas e tamanho são configuráveis. Aconselho olhar o help para conhecer todos os parâmetros. Notem que já posiciono a legenda no topo à esquerda ( topleft). No marcador [4], eu declaro o layout, colocando título, créditos, escala e o frame, que é uma moldura no conjunto. Notem que preferi desabilitar a seta do norte dentro desta função, pois eu a utilizo de outra forma (marcador [5]). Assim, eu consigo posicioná-la conforme convencionado: escala e seta à direita. Não sei exatamente como essa convenção começou. Só acho que é quase uma boa prática e sigo.

Gostaria de destacar algumas vantagens deste pacote:

  • visual agradável e muito bem comportado;

  • podemos usar os temas. Embora não possua um amplo leque de temas, podemos criar e usaá-los de maneira bem simples;

  • podemos usar o pipe do magrittr;

  • temos autonomia para alocar os componentes cartográficos como seta do norte, legenda, título, de uma maneira fácil, relativamente;

  • a legenda fica adequada e própria de um produto cartográfico decente;

  • a programação é, também relativamente, fácil e sem muitos rodeios (ou caixas pretas).

Como desvantagem, já notei que ainda é um pouco lento com bases muito pesadas. Mas tem aí o problema do R também, já que este não tem toda a estrutura dos tradicionais e muito bem conservados sistemas de informação geográfica.

Bom, era isso que queria mostrar. Sugestão: estudem e usem a cartografia!! Não caiam na tentação de criar mapas de forma fácil mas que não apresentam o objeto de forma intuitiva.

Bom trabalho!