library(tidyverse) # pacote para manipulação da base
library(sf) # pacote para importação dos dados
# importação da malha do RS que foi obtida no IBGE
mapa_rs <- read_sf("mapas_malhas/RS_Municipios_2022/RS_Municipios_2022.shp")Mapas no R - Parte 01
Este documento trata apenas de como podemos representar gráficos no R, tanto por meio de pacotes como por meio de importações de shapefiles de alguma pasta no computador. Nas próximas seções do documento vamos trabalhar cada uma dessas maneiras, começando pela criação dos mapas pela maneira mais tradicional, importando as malhas de algum site. Na sequência veremos uma alternativa, a de construir mapas por meio de pacotes que disponibilizam os mapas.
1 Construindo Mapas por Meio de Shapefiles (Malhas)
Todo mapa que vamos construir tem origem em um arquivo, na verdade um conjunto de arquivos, que contém um em especial chamado de malha. Essa abordagem pode ser considerada a mais tradicional para se produzir uma informação geográfica, podendo essas malhas serem utilizadas não somente no R, mas em outros softwares mais especializados, como ArcGIS.
Esses arquivos podem ser baixados de diversas fontes, dentre elas no Brasil temos o IBGE como grande ator na disponibilização desse tipo de arquivo. Vamos justamente começar pelo IBGE e depois partirmos para outras fontes de mapas mundiais.
1.1 Importando Malhas para Mapas do IBGE
O IBGE é uma fonte importante para obtermos as malhas que vamos precisar para construir a representação dos estados brasileiros, seus municípios, suas regiões ou até mesmo o Brasil como um todo.
Podemos encontrar as malhas pelo seguinte link: https://www.ibge.gov.br/geociencias/organizacao-do-territorio/malhas-territoriais/15774-malhas.html
Na página podemos baixar o mapa do Brasil ou de seus estados. É preciso sempre indicar o nível de representação que queremos em nosso mapa, de acordo com as opções indicadas. Assim, quando escolheremos Municipíios para um estado qualquer vamos ter representado um mapa com todos os seus municípios.
Importante indicar que as malhas são em geral pesadas, sendo que se escolhermos para representar o Brasil e seus Municípios o arquivo baixado será bastante grande, em alguns casos podendo ocorrer travamentos no R ou demora na execução do código.
Uma observação final é a de que podemos escolher os mapas por ano, bastando indicar o ano de nossa preferência. Isso pode ser importante quando quiseremos representar municípios mais antigos, que atualmente podem não mais existir, ou terem sido divididos em outros, por exemplo.
Quando baixados, os arquivos virão sempre compactados, devendo ser descompactados com algum software, em geral presente no próprio computador. Todos os arquivos baixados devem ser colocados em uma pasta própria dentro de nosso diretório de trabalho. Contudo, nosso trabalho será facilitado porque vamos na verdade sempre utilizar apenas um deles, no caso aquele cujo final for na extensão .shp, embora todos precisem estar junto na pasta do diretório do nosso trabalho.
Nossa primeira tarefa será a de importar a malha para um objeto, como já vinhamos fazendo com qualquer outra base de dados. Dentro do diretório onde colocamos nossas malhas baixadas do IBGE, devemos carregar aquela que contém o final .shp. A importação será feita utilizando a função read_sf() contida no pacote sf que deverá ser carregado, como mostrado por meio do código abaixo.
O objeto que criamos, chamado mapa_rs, é de um tipo muito particular porque ele sempre conterá uma coluna chamada geometry, como podemos observar na imagem abaixo. Será essa a coluna que contém as coordenadas de Latitude e Longitude necessárias para criar as fronteiras de nosso mapa.
view(mapa_rs)Podemos construir nosso mapa utilizando a função específica para criar mapas chamada geom_sf() como podemos observar no código mostrado abaixo.
# construção do mapa do RS
ggplot(data = mapa_rs) +
geom_sf()Nosso mapa poderia ser rapidamente modificado, como a mudança de cores, por meio de novos parâmetros, como mostraremos nos códigos abaixo.
# modificação 1
ggplot(data = mapa_rs) +
geom_sf(fill = "#f4812b", color = "white") # fill muda a cor dos municípios, e color a cor das fronteiras entre os municípios# modificação 2
ggplot(data = mapa_rs) +
geom_sf(fill = "#f4812b", color = "white") +
theme_void() # aqui theme_void() serve apenas para deixar mais clean nosso mapaDiversas outras opções de formatação da estética de nosso gráfico podem ser conseguidas, veremos mais algumas no decorrer do processo de criação de mapas.
No caso do mapa do Rio Grande do Sul temos que corrigir um pequeno problema, qual seja, a inclusão das lagos miriam e dos patos. Isso deve ser feito para que nosso mapa não fique errado quando quisermos associar nele alguma variável estatística. Essa pequena correção pode ser feita com a função filter() no momento da própria importação dos dados, como indicado no código abaixo.
# eliminando as lagos Mirim e dos Patos de nossa malha
mapa_rs %>%
filter(!NM_MUN %in% c("Lagoa Mirim", "Lagoa dos Patos")) %>%
ggplot() +
geom_sf(fill = "#f4812b", color = "white") +
theme_void()A minha recomendação para você é quando for trabalhar com mapas do RS já fazer essa modificação no próprio processo de importação de nossos dados, como mostrado abaixo.
library(tidyverse) # pacote para manipulação da base
library(sf) # pacote para importação dos dados
# importação da malha do RS que foi obtida no IBGE
mapa_rs <- read_sf("mapas_malhas/RS_Municipios_2022/RS_Municipios_2022.shp") %>%
filter(!NM_MUN %in% c("Lagoa Mirim", "Lagoa dos Patos")) # eliminando as duas lagos do RS no momento de importação de nossos dados O processo para construção de qualquer outro mapa cujas malhas são vindas do IBGE será o mesmo, basta baixarmos o arquivo no site, descompactar os arquivos e guardar em uma pasta dentro de nosso diretório de trabalho, e por último, carregar com a função read_sf() apenas aquele arquivo que tiver o final .shp.
Por exemplo, se baixarmos no site do IBGE os arquivos para o Brasil indicados como Unidades da Federação seremos capazes de construir um mapa dos estados do Brasil.
# construindo o mapa dos estados do Brasil
# importando a malha dos mapas
mapa_estados <- read_sf("mapas_malhas/BR_UF_2022/BR_UF_2022.shp")
# produzindo o mapa
mapa_estados %>%
ggplot() +
geom_sf() Podemos ainda acrescentar cores ao nosso gráfico, como fizemos anteriormente para o mapa do RS.
mapa_estados %>%
ggplot() +
geom_sf(fill = "#f4812b", color = "grey20") +
theme_void()Se aplicarmos um filtro em nossa base de dados podemos representar o mapa de um estado individualmente.
ggplot(data = mapa_estados %>%
filter(SIGLA_UF == "RS")) +
geom_sf() Como o ggplot() funciona com a ideia de criar os gráficos e mapas por camadas, por isso utilizamos o sinal de +, podemos dar destaque ao nosso mapa para alguma informação com códigos similares aos mostrados abaixo. Nele, foi feito apenas a criação de dois mapas, um geral para todos os estados brasileiros, e outro, a partir de um filtro, apenas para o RS e colocado sobre o anterior.
ggplot(mapa_estados) +
geom_sf() +
geom_sf(data = mapa_estados %>%
filter(SIGLA_UF == "RS"), fill = "#f4812b") +
theme_void()Uma advertência que faço é quanto a construção do mapa dos municípios do Brasil. Pode ser o caso de que o mapa possa demorar a ser gerado, ou até mesmo travar o seu computador, em decorrência do uso de memória do computador.
1.2 Importando Malhas de Países
Representar mapas dos países também é possível, basta termos as malhas para esses países. Uma boa fonte para obter uma malha mundial é o seguinte site: https://thematicmapping.org/.
Nesse site devemos buscar pelo arquivo chamado TM_WORLD_BORDERS-0.3.zip, que conterá as malhas que vão permitir gerar os mapas para os países. As etapas de como podemos obter esse arquivo são mostrados nas imagens abaixo.
Após o download do arquivo devemos descompactar e colocar em uma pasta dentro de nosso diretório de trabalho. Para carregar, devemos realizar os mesmos passos feitos com as malhas obtidas do IBGE, ou seja, utilizamos a função read_sf() para importar o arquivos que tem a extensão final .shp.
mapa_mundi <- read_sf("mapas_malhas/TM_WORLD_BORDERS-0.3/TM_WORLD_BORDERS-0.3.shp")O arquivo importado deverá conter algumas informações sobre os países, mas o principal é a coluna geometry, será ela que vai produzir o mapa.
view(mapa_mundi)O mapa com os países nessa malha pode ser produzido de maneira similar a que fizemos no caso dos daos vindos do IBGE.
mapa_mundi %>%
ggplot() +
geom_sf()mapa_mundi %>%
ggplot() +
geom_sf() +
theme_void()Podemos construir mapas específicos para regiões por meio de filtros a partir das variáveis contidas no objeto que importamos.
mapa_mundi %>%
filter(ISO3 == "BRA") %>%
ggplot() +
geom_sf()mapa_mundi %>%
filter(SUBREGION == 5) %>%
ggplot() +
geom_sf(fill = "#1f618d", color = "white") +
theme_void()mapa_mundi %>%
filter(REGION == 2) %>%
ggplot() +
geom_sf(fill = "#1f618d", color = "white") +
theme_void()Outro site que possibilita obter malhas de países é este: https://www.geoboundaries.org.
Neste site é possível realizar o download das malhas individuais dos países, alguns com divisões a nível subnacional, ou de forma completa para todos os países. Se a opção for pelo Download completo, devemos seguir o caminho 3 indicado na imagem abaixo.
Ao clicarmos nela, vamos ser redirecionados para uma nova página dentro do site, como mostrado na figura abaixo, onde podemos escolher o tipo de arquivo a ser baixado, baixar os arquivos do tipo shapefile, e o nível de desagregação a ser mostrado. A desagregação começa no tipo ADM0, o nível onde é mostrado apenas a área do país, até as outras opções, ADM1 e ADM2, que fornecem diferentes regiões dentro de um país. Basta observar que quanto mais informação mais pesado será o arquivos, e maior a probabilidade de o arquivo causar algum travamento dentro do R.
Na outra opção de download, podemos indicar diretamente o nome de um dos países que temos interesse em obter a malha, figura abaixo. Basta para isso indicar o nome, sempre em inglês, e então escolher o nível de desagregação que queremos e que seja possível para o país escolhido.
Após os downloads terem sido feitos, o procedimento é sempre o mesmo já visto nas outras fontes de mapas, basta carregar a malha desejada com a função read_sf(), e depois construir o mapa desejado, como mostram os exemplos abaixo.
# criando um objeto que contém as malhas dos países do mundo
d <- read_sf("mapas_malhas/geoBoundariesCGAZ_ADM0/geoBoundariesCGAZ_ADM0.shp")
# construindo o mapa mundi dos países
d %>%
ggplot() +
geom_sf()# baixando a malha dos estados do Brasil
e <- read_sf("mapas_malhas/geoBoundaries-BRA-ADM1-all/geoBoundaries-BRA-ADM1.shp")
# construindo o mapa a partir da malha importada
e %>%
ggplot() +
geom_sf()# baixando a malha dos municípios do Brasil
f <- read_sf("mapas_malhas/geoBoundaries-BRA-ADM2-all/geoBoundaries-BRA-ADM2.shp")
# Construíndo um mapa dos municípios do Brasil
f %>%
ggplot() +
geom_sf() +
theme_void()Vale lembrar que esse site indica que deveria ser feito uma citação caso os mapas sejam utilizados. A maneira como deve ser feita a citação está no site.
2 Construindo Mapas por Meio de Pacotes
A outra opção para representarmos mapas no R é por meio de pacotes que contenham as malhas. Esses pacotes podem ser úteis devido a não necessidade de realizar download prévio das malhas, como fizemos anteriormente em diversos sites. Vários desses pacotes tratam de mapas específicos sendo que na sequência vamos conhecer melhor o pacote geobr especializado em mapas do Brasil. Após aprendermos as principais funções disponíveis nele, vamos trabalhar mais um pacote com foco em mapas de países, rgeoboundaries.
2.1 Mapas Brasileiros com o Pacote geobr
Nosso primeiro pacote a disponibilizar mapas tem o foco inteiramente em regiões brasileiras, sendo possível especificar o mapa que queremos por níveis de decentralização. Esse, assim como qualquer outro pacote de mapas, poupa que tenhamos que entrar em algum site para obter os shapefiles, sendo uma vantagem considerável quando conseguimos um pacote que contenha a malha desejada.
Importante lembrar que como todo pacote, precisamos primeiramente instalar ele, caso ele ainda não esteja em nossa máquina. Isso é feito uma única vez, sendo que nas demais precisamos apenas carregar o pacote. Vejamos abaixo os códigos necessários para instalar e carregar o pacote geobr.
# instalação do pacote geobr
# install.packages("geobr")
# lista de pacotes a serem utilizados
library(tidyverse)
library(geobr) # pacote para representar malhas do BrasilUma vez carregado o pacote com a função library() vão estar disponíveis diversas funções, sendo que vamos utilizar algumas delas apenas. Podemos, por exemplo, obter o mapa dos estados do Brasil com a seguinte função: read_state().
# importando a malha dos estados
estados_br <- read_state(year = 2018)Assim como aconteceu quando fizemos o download dos arquivos de shapefile e carregamos para nosso computador, teremos uma coluna chamada geometry que é a responsável por construir o gráfico. Em nossas análise, ela nunca deverá ser excluida, caso contrário o mapa não pode ser gerado. No caso de nosso exemplo, podemos ainda especificar um ano como argumento da função. Para saber quais argumentos as funções permitem é recomendado sempre buscar a ajuda para a função utilizada, sendo que no caso da nossa função essa ajuda poderia ter sido feito com o comando ?read_state.
O mapa dos estados pode ser obtido normalmente pelo código mostrado abaixo, onde assim como antes, o mapa é construido com a função geom_sf().
# construindo um gráfico com essa malha
estados_br %>%
ggplot() +
geom_sf()A partir da função acima, fica fácil obter o mapa para algum estado em particular, basta que nós indiquemos um filtro com o nome do município desejado, como mostrado abaixo para o caso do Paraná.
estados_br %>%
filter(code_state == 41) %>%
ggplot() +
geom_sf()Outra função muito utilizada é quando queremos o mapa dos municípios para algum estado em específico, por exemplo, o Paraná. Para isso, basta utilizar a seguinte função: read_municipality(), como o argumento code_muni = "PR" dentro da função com o nome do estado que queremos.
mapa_pr <- read_municipality(code_muni = "PR", year = 2018)Cuja representação é facilmente obtida pelo código mostrado abaixo.
mapa_pr %>%
ggplot() +
geom_sf(fill = "#1f618d", color = "white") +
labs(title = "Municípios do Estado do Paraná",
subtitle = "O segundo melhor estado do BR para se viver") +
theme_void()Caso não especifiquemos nenhum estado dentro da função, vai ser retornado todos os estados do Brasil e seus municípios.
brasil_muni <- read_municipality(year = 2018)brasil_muni %>%
ggplot() +
geom_sf() +
theme_void()Esse pacote foi desenvolvido para permitir uma integração com as bases de dados do IBGE, por isso, é possível verificar que os códigos que representam os municípios são todos padronizados para serem os mesmos que estão presentes nos dados das pesquisas produzidas pelo IBGE. Isso é algo que vai facilitar muito nossa vida no momento de acrescentarmos estatísticas econômicas e sociais aos nossos mapas.
É possível ainda fazer buscas por municípios, bastando para isso indicar o correto nome do município do qual se deseja obter o mapa. Por exemplo, no código abaixo, podemos obter o município de Santana do Livramento por meio do seguinte código:
livramento <- read_municipality(code_muni = 4317103, year = 2018)
livramento %>%
ggplot() +
geom_sf() +
theme_void()Podemos ainda em um mapa dar destaque da sequinte maneira:
rs <- read_municipality(code_muni = "RS", year = 2018)
rs %>%
filter(!name_muni %in% c("Lagoa Mirim", "Lagoa Dos Patos")) %>%
ggplot() +
geom_sf(fill = "#1f618d", color = "white") +
geom_sf(data = livramento, fill = "#FFBF00") + # nova camada utilizando o objeto Livramento criado antes
labs(title = "Santana do Livramento - RS",
subtitle = "Fronteira da Paz") +
theme_void() +
theme(plot.title = element_text(size = 25, colour = "grey20"),
plot.subtitle = element_text(size = 13)
)Esse pacote deve também ser citado em publicações para que os seus autores sejam reconhecidos pelo seu esforço na disponibilização desses mapas!!
2.2 Mapas Mundiais com o Pacote rgeoboundaries
Outro pacote disponível para construção de mapas tem o foco na disponibilização de mapas de países, chamado rgeoboundaries. Esse pacote é ligado ao site anterior no qual foram obtidas varias malhas para representar países. O processo de instalação desse pacote é um pouco diferente, exigindo que tenhamos que instalar um pacote adicional, chamado remotes.
Abaixo é apresentado a maneira como deve ser feita a instalação do pacote rgeoboundaries. Lembre que essa instalação é feita apenas uma vez.
install.packages("remotes") # instalar somente uma vez. pacote auxiliar para a instalação dos mapas
library(remotes) # só carregar a vez que for instalar o pacote rgeoboundaries
remotes::install_github("wmgeolab/rgeoboundaries") # instalação do pacote de mapasDepois que o pacote tenha baixado você pode fazer o carregamento da maneira padrão, como indica o código abaixo.
# carregamento do pacote
library(rgeoboundaries) # pacote para representar malhas mundiasNesse pacote vamos utilizar a função geoboundaries() onde em seu argumento vamos indicar o país, ou países que queremos os dados, bem como a quantidade de subníveis geográficos que queremos mostrar dentro de um país.
Quando não especificarmos nenhum país dentro de geoboundaries() faremos automaticamente a importação de todos os países, como mostrado abaixo. Além disso, por padrão será também baixado o mapa sem subníveis geográficos para cada país.
# pedindo para importar todos os países
mundo <- geoboundaries()O gráfico pode ser mostrado como:
mundo %>%
ggplot() +
geom_sf()Caso nosso objetivo seja obter um país em específico, podemos indicar dentro da função por meio de seu nome em inglês.
# baixando o mapa do uruguai
uru <- geoboundaries("Uruguay")
# construindo o gráfico desse país
uru %>%
ggplot() +
geom_sf() Caso seja preciso, podemos ainda tentar obter mais informações de subdivisões nacionais dentro de um país especificiando o argumento adm1 ou adm2.
# mais detalhamento em nosso mapa
geoboundaries("Uruguay", "adm1") %>%
ggplot() +
geom_sf(fill = "#229954", color = "white") +
labs(title = "Uruguai") +
theme_void()Podemos ainda obter mais de um país, bastando para isso indicar os nomes dos países por meio de um vetor.
# Fazendo uma busca por mais de um país
geoboundaries(c("Uruguay", "Brazil")) %>%
ggplot() +
geom_sf(fill = "#229954", color = "white") +
theme_void()O pacote sempre vai tentar mostrar os países em suas posições dentro do mapa global, por isso pode não ser interessante fazer uma seleção de países que não sejam vizinhos próximos, como mostrado no código seguinte.
# fazendo uma busca por mais de um país
geoboundaries(c("Uruguay", "Mexico"), "adm1") %>%
ggplot() +
geom_sf(fill = "#229954", color = "white") +
theme_void()Sempre importante lembrar que esse pacote pode também ser citado em trabalhos que utilizarem seus mapas, como uma forma de reconhecer o trabalho dos seus desenvolvedores.