Mapas do Brasil em R

Integrando os pacotes geobr e tidyverse

Autor

Gustavo Jun Yakushiji

Data de Publicação

21-01-2025

Introdução

Neste material, apresentaremos uma das diversas possibilidade de utilização de mapas no R. Existe uma grande variedade de pacotes desenvolvidos pela comunidade do R que tratam sobre o assunto. No caso da confecção de mapas do Brasil, utilizaremos o pacote geobr.

O pacote geobr foi desenvolvido por membros da equipe do Instituto de Pesquisa Econômica Aplicada (IPEA). Nele, encontramos uma ampla gama de dados geoespaciais oficiais do Brasil, disponíveis em várias escalas geográficas e por vários anos, com atributos, projeção e topologia harmonizados.

Além do geobr, utilizaremos funções dos pacotes presentes no tidyverse para a manipulação e visualização de dados. Caso queira saber mais sobre as funcionalidades do tidyverse, confira o seguinte material: https://gustavojy.github.io/apostila-icdr/.

A instalação dos pacotes geobr e tidyverse pode ser realizada diretamente via CRAN.

install.packages("geobr")
install.packages("tidyverse")
Nota

Este material foi desenvolvido a partir da versão 1.8.2 do pacote geobr, que pode passar por melhorias e incrementos ao longo do tempo.

1 Funções do geobr

O pacote geobr oferece uma grande variedade de conjuntos de dados geoespaciais abrangendo diversos temas de mapas do Brasil. Para verificar todas as funcionalidades disponíveis, utilizamos a função list_geobr().

function geography years source
`read_country` Country 1872, 1900, 1911, 1920, 1933, 1940, 1950, 1960, 1970, 1980, 1991, 2000, 2001, 2010, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 IBGE
`read_region` Region 2000, 2001, 2010, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 IBGE
`read_state` States 1872, 1900, 1911, 1920, 1933, 1940, 1950, 1960, 1970, 1980, 1991, 2000, 2001, 2010, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 IBGE
`read_meso_region` Meso region 2000, 2001, 2010, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 IBGE
`read_micro_region` Micro region 2000, 2001, 2010, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 IBGE
`read_intermediate_region` Intermediate region 2017, 2019, 2020 IBGE
`read_immediate_region` Immediate region 2017, 2019, 2020 IBGE
`read_municipality` Municipality 1872, 1900, 1911, 1920, 1933, 1940, 1950, 1960, 1970, 1980, 1991, 2000, 2001, 2005, 2007, 2010, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 IBGE
`read_municipal_seat` Municipality seats (sedes municipais) 1872, 1900, 1911, 1920, 1933, 1940, 1950, 1960, 1970, 1980, 1991, 2010 IBGE
`read_weighting_area` Census weighting area (área de ponderação) 2010 IBGE
`read_census_tract` Census tract (setor censitário) 2000, 2010, 2017, 2019, 2020 IBGE
`read_statistical_grid` Statistical Grid of 200 x 200 meters 2010 IBGE
`read_metro_area` Metropolitan areas 1970, 2001, 2002, 2003, 2005, 2010, 2013, 2014, 2015, 2016, 2017, 2018 IBGE
`read_urban_area` Urban footprints 2005, 2015 IBGE
`read_amazon` Brazil's Legal Amazon 2012 MMA
`read_biomes` Biomes 2004, 2019 IBGE
`read_conservation_units` Environmental Conservation Units 201909 MMA
`read_disaster_risk_area` Disaster risk areas 2010 CEMADEN and IBGE
`read_indigenous_land` Indigenous lands 201907, 202103 FUNAI
`read_semiarid` Semi Arid region 2005, 2017, 2021, 2022 IBGE
`read_health_facilities` Health facilities 201505, 202303 CNES, DataSUS
`read_health_region` Health regions and macro regions 1991, 1994, 1997, 2001, 2005, 2013 DataSUS
`read_neighborhood` Neighborhood limits 2010 IBGE
`read_schools` Schools 2020, 2023 INEP
`read_comparable_areas` Historically comparable municipalities, aka Áreas mínimas comparáveis (AMCs) 1872, 1900, 1911, 1920, 1933, 1940, 1950, 1960, 1970, 1980, 1991, 2000, 2010 IBGE
`read_urban_concentrations` Urban concentration areas (concentrações urbanas) 2015 IBGE
`read_pop_arrangements` Population arrangements (arranjos populacionais) 2015 IBGE

A list_geobr() nos retorna um data frame com todos os dados disponíveis no pacote. Com a função, podemos verificar as seguintes variáveis:

  • function: o nome das funções que contêm os conjuntos de dados;

  • geography: a abrangência geográfica dos dados;

  • years: os anos disponíveis;

  • source: a fonte dos dados.

A seguir, veremos como utilizar cada uma dessas funções.

2 Mapa do país

Para acessar o mapa do Brasil, utilizamos a função read_country().

brasil <- read_country()
class(brasil)
#> [1] "sf"         "data.frame"

Com a função class(), verificamos que a read_country() é um data frame do tipo "sf" (sigla para simple features). De maneira geral, os objetos do tipo sf contém informações geoespaciais que são utilizadas para a confecção dos mapas no R1.

Para visualizarmos o mapa, utilizamos as ferramentas do pacote ggplot2 (um dos diversos membros do tidyverse) para traduzir as informações geoespaciais do geobr em mapas.

ggplot(brasil) +
  geom_sf()

Com a função ggplot(), utilizamos a geometria geom_sf(), que converte os dados do tipo sf em mapa.

A mesma lógica que utilizamos para confeccionar gráficos no ggplot2 é aplicável aos mapas. A seguir, demonstraremos um exemplo básico de personalização do mapa anterior.

ggplot(brasil) +
  geom_sf(fill = "#2D3E50", color = "#FEBF57") +
  theme_bw() +
  labs(
    title = "Mapa do Brasil",
    subtitle = "com os pacotes geobr e tidyverse",
    x = "Longitude",
    y = "Latitude"
  )

Cada mapa do geobr utiliza uma escala e um sistema geodésico de referência específicos. Para conferi-los, acesse a documentação das respectivas funções. Como exemplo, podemos acessar a documentação da função read_country() da seguinte maneira.

?read_country

Neste caso, o mapa gerado pela função está na escala 1:250.000 e utiliza o SIRGAS2000 e o CRS(4674) como sistemas geodésicos de referência.

3 Estados

Para representarmos o mapa do Brasil dividido por estados, utilizamos a função read_state(). Dentro da função, podemos utilizar alguns argumentos adicionais.

read_state(
  code_state = "all", year = 2020, 
  simplified = FALSE, showProgress = FALSE
) |> 
  ggplot() + 
  geom_sf() +
  theme_bw()

O argumento code_state = é utilizado para especificar qual(is) estados serão utilizados para compor o mapa. Se code_state = "all", todos os estados são utilizados. Na Seção 3.1, demonstraremos como trabalhar com os estados de maneira individualizada.

O year = permite selecionar um ano em específico do conjunto de dados. Caso o argumento não seja declarado, por padrão, será adotado o ano de 2010. Como ilustração, podemos comparar o mapa dos estados do Brasil nos anos de 1872 e 2020.

# Mapa à esquerda
read_state(
  code_state = "all", year = 1872, 
  simplified = FALSE, showProgress = FALSE
) |> 
  ggplot() + 
  geom_sf(fill = "lightgray") +
  theme_bw() +
  labs(title = "1872")

# Mapa à direita
read_state(
  code_state = "all", year = 2020, 
  simplified = FALSE, showProgress = FALSE
) |> 
  ggplot() + 
  geom_sf(fill = "lightgray") +
  theme_bw() +
  labs(title = "2020")

Já o argumento simplified = trata da resolução do mapa. Caso simplified = TRUE, as bordas do mapa são traçadas de maneira aproximada. Por outro lado, caso simplified = FALSE, as bordas são traçadas de modo detalhado. Por padrão, caso o argumento não for especificado, adota-se simplified = TRUE.

Por fim, o argumento showProgress = aceita valores lógicos para mostrar (TRUE) ou não (FALSE) a barra de progresso da importação dos dados.

3.1 Selecionar estados

Para selecionar um estado em específico, podemos utilizar a abreviação do nome do estado (abbrev_state) ou um código de dois dígitos (code_state). Tanto as abreviações, como os códigos podem ser consultados no data frame da função read_state().

read_state(code_state = "all") |> View()
code_state abbrev_state name_state code_region name_region geom
11 RO Rondônia 1 Norte MULTIPOLYGON (((-63.32721 -...
12 AC Acre 1 Norte MULTIPOLYGON (((-73.18253 -...
13 AM Amazonas 1 Norte MULTIPOLYGON (((-67.32609 2...
14 RR Roraima 1 Norte MULTIPOLYGON (((-60.20051 5...
15 PA Pará 1 Norte MULTIPOLYGON (((-54.95431 2...
16 AP Amapá 1 Norte MULTIPOLYGON (((-51.1797 4....
17 TO Tocantins 1 Norte MULTIPOLYGON (((-48.35878 -...
21 MA Maranhão 2 Nordeste MULTIPOLYGON (((-45.84073 -...
22 PI Piauí 2 Nordeste MULTIPOLYGON (((-41.74605 -...
23 CE Ceará 2 Nordeste MULTIPOLYGON (((-41.16703 -...
24 RN Rio Grande Do Norte 2 Nordeste MULTIPOLYGON (((-37.25329 -...
25 PB Paraíba 2 Nordeste MULTIPOLYGON (((-37.22269 -...
26 PE Pernambuco 2 Nordeste MULTIPOLYGON (((-32.39705 -...
27 AL Alagoas 2 Nordeste MULTIPOLYGON (((-35.46753 -...
28 SE Sergipe 2 Nordeste MULTIPOLYGON (((-37.99245 -...
29 BA Bahia 2 Nordeste MULTIPOLYGON (((-39.36446 -...
31 MG Minas Gerais 3 Sudeste MULTIPOLYGON (((-41.87545 -...
32 ES Espirito Santo 3 Sudeste MULTIPOLYGON (((-41.87545 -...
33 RJ Rio De Janeiro 3 Sudeste MULTIPOLYGON (((-41.85946 -...
35 SP São Paulo 3 Sudeste MULTIPOLYGON (((-44.90215 -...
41 PR Paraná 4 Sul MULTIPOLYGON (((-52.05188 -...
42 SC Santa Catarina 4 Sul MULTIPOLYGON (((-48.63865 -...
43 RS Rio Grande Do Sul 4 Sul MULTIPOLYGON (((-51.90486 -...
50 MS Mato Grosso Do Sul 5 Centro Oeste MULTIPOLYGON (((-56.1037 -1...
51 MT Mato Grosso 5 Centro Oeste MULTIPOLYGON (((-54.89485 -...
52 GO Goiás 5 Centro Oeste MULTIPOLYGON (((-50.16015 -...
53 DF Distrito Federal 5 Centro Oeste MULTIPOLYGON (((-47.57461 -...

Como exemplo, selecionaremos o estado de São Paulo a partir de sua nomenclatura abreviada e pelo seu código de identificação.

# Mapa à esquerda
read_state(code_state = "SP", year = 2020, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

# Mapa à direita
read_state(code_state = 35, year = 2020, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

Também podemos formar um mapa com mais de um estado. Para isso, utilizamos a função dplyr::filter(). O exemplo a seguir representa a região do MATOPIBA, composta pelos estados do Maranhão, Tocantins, Piauí e Bahia.

read_state(code_state = "all", year = 2020, showProgress = FALSE) |> 
  dplyr::filter(abbrev_state %in% c("MA", "TO", "PI", "BA")) |> 
  ggplot() +
  geom_sf(aes(fill = name_state)) +
  scale_fill_brewer(palette = "Pastel1") +
  theme_classic() +
  labs(fill = "MATOPIBA")

3.2 Adicionar legendas

Para adicionar legendas nos mapas, utilizamos a função geom_sf_text() junto à ggplot(). A seguir, adicionaremos as abreviações dos nomes dos estados como legenda no mapa do Brasil.

read_state(code_state = "all", year = 2020, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  geom_sf_text(aes(label = abbrev_state), size = 1.8) +
  theme_bw()

Dentro da função geom_sf_text() declaramos o argumento label = dentro da aes(), indicando que, para compor a legenda, serão consideradas as abreviações dos nomes dos estados (abbrev_state).

3.3 Estado de um CEP

A função cep_to_state() nos retorna o estado correspondente a um CEP (Código de Endereçamento Postal). Apresenta o argumento cep = que recebe um valor de 8 dígitos, podendo ser redigido no formato “xxxxx-xxx” ou em números corridos.

cep_to_state(cep = "13416-020")
#> [1] "SP"

cep_to_state(cep = "13416020")
#> [1] "SP"

4 Regiões geográficas

De maneira semelhante aos estados, podemos dividir o mapa do Brasil em regiões geográficas. Para isso, utilizamos a função read_region().

read_region(year = 2020, showProgress = FALSE) |> 
  ggplot() +
  geom_sf(aes(fill = name_region)) +
  scale_fill_brewer(palette = "Paired") +
  theme_classic() +
  labs(fill = "Região")

4.1 Selecionar regiões

Para selecionar uma região específica, utilizamos, novamente, a função dplyr::filter(). No exemplo a seguir, filtraremos a região Nordeste.

read_region(year = 2020, showProgress = FALSE) |> 
  dplyr::filter(name_region == "Nordeste") |> 
  ggplot() +
  geom_sf() +
  theme_classic()

4.2 Regiões com os estados

Para gerarmos o mapa de uma região geográfica delimitada pelos estados, devemos filtrar as respectivas observações da região. Como exemplo, filtraremos as observações dos estados da região Nordeste, presentes na variável name_region da função read_state().

nordeste <- read_state(code_state = "all", year = 2020, showProgress = FALSE) |> 
  dplyr::filter(name_region == "Nordeste")
View(nordeste)
code_state abbrev_state name_state code_region name_region geom
21 MA Maranhão 2 Nordeste MULTIPOLYGON (((-44.9662 -1...
22 PI Piauí 2 Nordeste MULTIPOLYGON (((-42.91509 -...
23 CE Ceará 2 Nordeste MULTIPOLYGON (((-41.18292 -...
24 RN Rio Grande Do Norte 2 Nordeste MULTIPOLYGON (((-37.04412 -...
25 PB Paraíba 2 Nordeste MULTIPOLYGON (((-34.79576 -...
26 PE Pernambuco 2 Nordeste MULTIPOLYGON (((-32.3924 -3...
27 AL Alagoas 2 Nordeste MULTIPOLYGON (((-35.75791 -...
28 SE Sergipe 2 Nordeste MULTIPOLYGON (((-36.91665 -...
29 BA Bahia 2 Nordeste MULTIPOLYGON (((-38.69616 -...
ggplot(nordeste) +
  geom_sf(aes(fill = name_state)) +
  scale_fill_brewer(palette = "Paired") +
  theme_classic() +
  labs(fill = "Estados Nordestinos")

5 Mesorregiões e Microrregiões

Para representarmos as mesorregiões e as microrregiões do Brasil, utilizamos as funções read_meso_region() e read_micro_region(), respectivamente. A lógica dessas funções é a mesma das anteriores, apenas alterando o argumento code_state = para code_meso = e code_micro =.

5.1 Mesorregiões

read_meso_region(code_meso = "all", year = 2020, showProgress = FALSE) |>
  ggplot() +
  geom_sf() +
  theme_bw()

5.1.1 Selecionar Mesorregiões

Para selecionar uma mesorregião, colocamos a abreviação do nome do estado ou seu código de identificação no argumento code_meso =. Como exemplo, selecionaremos as mesorregiões do estado de Minas Gerais.

read_meso_region(code_meso = "MG", year = 2020, showProgress = FALSE) |>
  ggplot() +
  geom_sf() +
  theme_bw()

Para selecionar mais de uma mesorregião, utilizamos o dplyr::filter() para filtrar as mesorregiões dos estados. A seguir, filtramos as dos estados do Rio de Janeiro e Espírito Santo.

read_meso_region(code_meso = "all", year = 2020, showProgress = FALSE) |> 
  dplyr::filter(abbrev_state %in% c("RJ", "ES")) |> 
  ggplot() +
  geom_sf(aes(fill = abbrev_state)) +
  theme_bw() +
  labs(fill = "Estados")

Para selecionar uma mesorregião específica de um estado, devemos colocar o seu código de identificação no argumento code_meso =. Lembrando que todos os códigos de identificação podem ser conferidos no data frame da respectiva função.

read_meso_region(code_meso = 3515, year = 2020, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

No exemplo anterior, selecionamos a mesorregião metropolitana de São Paulo

5.1.2 Regiões geográficas intermediárias

As regiões geográficas intermediárias são parte de uma nova divisão geográfica criada pelo IBGE em 2017, sendo concebidas para substituir as mesorregiões. Utilizamos a função read_intermediate_region() para representá-las.

read_intermediate_region(code_intermediate = "all", year = 2020, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

5.2 Microrregiões

read_micro_region(code_micro = "all", year = 2020, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

5.2.1 Selecionar Microrregiões

No exemplo a seguir, selecionaremos as microrregiões do estado do Rio Grande do Sul.

read_micro_region(code_micro = "RS", year = 2020, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

Também, selecionaremos as microrregiões dos estados de Santa Catarina e do Paraná.

read_micro_region(code_micro = "all", year = 2020, showProgress = FALSE) |> 
  dplyr::filter(abbrev_state %in% c("SC", "PR")) |> 
  ggplot() +
  geom_sf(aes(fill = abbrev_state)) +
  theme_bw() +
  labs(fill = "Estados")

Com o código 42002, selecionamos uma única microrregião, respectiva à microrregião de Chapecó, no estado de Santa Catarina.

read_micro_region(code_micro = 42002, year = 2020, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

5.2.2 Regiões geográficas imediatas

Assim como as regiões geográficas intermediárias, as regiões geográficas imediatas são parte de uma nova divisão geográfica criada pelo IBGE em 2017, substitutas das microrregiões. Utilizamos a função read_immediate_region() para ilustrá-las.

read_immediate_region(code_immediate = "all", year = 2020, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

6 Municípios

Para representarmos os municípios do Brasil, utilizamos a função read_municipality().

read_municipality(code_muni = "all", year = 2020, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

6.1 Procurar municípios

A função lookup_muni() nos auxilia a encontrar informações referentes a códigos, nomenclaturas e classificações de municípios. Para isso, indicamos o nome de um município no argumento name_muni = para buscar suas informações.

lookup_muni(name_muni = "Piracicaba") |> View()
code_muni name_muni code_state name_state abbrev_state code_micro name_micro code_meso name_meso code_immediate name_immediate code_intermediate name_intermediate
3538709 Piracicaba 35 São Paulo SP 35028 Piracicaba 3506 Piracicaba 350040 Piracicaba 3510 Campinas

No exemplo acima, verificamos que o código 3538709 é respectivo ao município de Piracicaba/SP.

6.2 Selecionar Municípios

No argumento code_muni =, informamos a abreviatura do nome de um estado para selecionar todos os seus municípios.

read_municipality(code_muni = "SP", year = 2020, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

Caso queira acessar um município em específico, colocamos seu código de identificação no argumento code_muni =.

lookup_muni(name_muni = "Piracicaba") |> dplyr::glimpse()
#> Rows: 1
#> Columns: 13
#> $ code_muni         <int> 3538709
#> $ name_muni         <chr> "Piracicaba"
#> $ code_state        <int> 35
#> $ name_state        <chr> "São Paulo"
#> $ abbrev_state      <chr> "SP"
#> $ code_micro        <int> 35028
#> $ name_micro        <chr> "Piracicaba"
#> $ code_meso         <int> 3506
#> $ name_meso         <chr> "Piracicaba"
#> $ code_immediate    <int> 350040
#> $ name_immediate    <chr> "Piracicaba"
#> $ code_intermediate <int> 3510
#> $ name_intermediate <chr> "Campinas"
read_municipality(code_muni = 3538709, year = 2020, showProgress = FALSE) |>
  ggplot() +
  geom_sf() +
  theme_bw()

Para selecionar mais de um município, utilizamos a dplyr::filter().

read_municipality(year = 2020, showProgress = FALSE) |>
  dplyr::filter(name_muni %in% c("Piracicaba", "Limeira", "Rio Das Pedras", "Iracemápolis")) |> 
  ggplot() +
  geom_sf() +
  geom_sf_label(aes(label = name_muni)) +
  theme_bw()

6.3 Mapa do Brasil com as capitais

Podemos representar as capitais de cada estado no mapa do país. Para tanto, utilizamos as informações referentes aos municípios para construir o mapa.

Primeiramente, salvaremos em objetos as informações dos estados e dos municípios, contidos nas funções read_state() e read_municipality(), respectivamente.

estados <- read_state(code_state = "all", year = 2019, showProgress = FALSE)

municipios <- read_municipality(code_muni = "all", year = 2019, showProgress = FALSE)

Em seguida, criaremos um data frame denominado cap, contendo as capitais de cada estado, para, posteriormente, selecionar apenas os municípios respectivos às capitais.

caps <- data.frame(
  name_state = c(
    "Acre", "Alagoas", "Amapá", "Amazônas", "Bahia", "Ceará",
    "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul",
    "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", 
    "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia",
    "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins", "Distrito Federal"
  ),
  name_muni = c(
    "Rio Branco", "Maceió", "Macapá", "Manaus", "Salvador", "Fortaleza",
    "Vitória", "Goiânia", "São Luís", "Cuiabá", "Campo Grande",
    "Belo Horizonte", "Belém", "João Pessoa", "Curitiba", "Recife", "Teresina",
    "Rio De Janeiro", "Natal", "Porto Alegre", "Porto Velho", "Boa Vista",
    "Florianópolis", "São Paulo", "Aracaju", "Palmas", "Brasília"
  )
)

caps
#>             name_state      name_muni
#> 1                 Acre     Rio Branco
#> 2              Alagoas         Maceió
#> 3                Amapá         Macapá
#> 4             Amazônas         Manaus
#> 5                Bahia       Salvador
#> 6                Ceará      Fortaleza
#> 7       Espírito Santo        Vitória
#> 8                Goiás        Goiânia
#> 9             Maranhão       São Luís
#> 10         Mato Grosso         Cuiabá
#> 11  Mato Grosso do Sul   Campo Grande
#> 12        Minas Gerais Belo Horizonte
#> 13                Pará          Belém
#> 14             Paraíba    João Pessoa
#> 15              Paraná       Curitiba
#> 16          Pernambuco         Recife
#> 17               Piauí       Teresina
#> 18      Rio de Janeiro Rio De Janeiro
#> 19 Rio Grande do Norte          Natal
#> 20   Rio Grande do Sul   Porto Alegre
#> 21            Rondônia    Porto Velho
#> 22             Roraima      Boa Vista
#> 23      Santa Catarina  Florianópolis
#> 24           São Paulo      São Paulo
#> 25             Sergipe        Aracaju
#> 26           Tocantins         Palmas
#> 27    Distrito Federal       Brasília

Para isso, utilizamos a função dplyr::inner_join() que seleciona apenas as capitais presentes no banco de dados do objeto municipios, baseado na correspondência com o data frame caps.

capitais <- dplyr::inner_join(municipios, caps)
View(capitais)
code_muni name_muni code_state abbrev_state name_state code_region name_region geom
1100205 Porto Velho 11 RO Rondônia 1 Norte MULTIPOLYGON (((-64.15566 -...
1200401 Rio Branco 12 AC Acre 1 Norte MULTIPOLYGON (((-68.72516 -...
1302603 Manaus 13 AM Amazônas 1 Norte MULTIPOLYGON (((-59.99379 -...
1400100 Boa Vista 14 RR Roraima 1 Norte MULTIPOLYGON (((-61.00055 3...
1501402 Belém 15 PA Pará 1 Norte MULTIPOLYGON (((-48.52311 -...
1600303 Macapá 16 AP Amapá 1 Norte MULTIPOLYGON (((-51.23995 0...
1721000 Palmas 17 TO Tocantins 1 Norte MULTIPOLYGON (((-48.35837 -...
2111300 São Luís 21 MA Maranhão 2 Nordeste MULTIPOLYGON (((-44.41227 -...
2211001 Teresina 22 PI Piauí 2 Nordeste MULTIPOLYGON (((-42.71976 -...
2304400 Fortaleza 23 CE Ceará 2 Nordeste MULTIPOLYGON (((-38.47076 -...
2408102 Natal 24 RN Rio Grande do Norte 2 Nordeste MULTIPOLYGON (((-35.20075 -...
2507507 João Pessoa 25 PB Paraíba 2 Nordeste MULTIPOLYGON (((-34.84737 -...
2611606 Recife 26 PE Pernambuco 2 Nordeste MULTIPOLYGON (((-34.89675 -...
2704302 Maceió 27 AL Alagoas 2 Nordeste MULTIPOLYGON (((-35.75791 -...
2800308 Aracaju 28 SE Sergipe 2 Nordeste MULTIPOLYGON (((-37.0371 -1...
2927408 Salvador 29 BA Bahia 2 Nordeste MULTIPOLYGON (((-38.40586 -...
3106200 Belo Horizonte 31 MG Minas Gerais 3 Sudeste MULTIPOLYGON (((-43.92658 -...
3205309 Vitória 32 ES Espírito Santo 3 Sudeste MULTIPOLYGON (((-29.33711 -...
3304557 Rio De Janeiro 33 RJ Rio de Janeiro 3 Sudeste MULTIPOLYGON (((-43.70288 -...
3550308 São Paulo 35 SP São Paulo 3 Sudeste MULTIPOLYGON (((-46.63386 -...
4106902 Curitiba 41 PR Paraná 4 Sul MULTIPOLYGON (((-49.25538 -...
4205407 Florianópolis 42 SC Santa Catarina 4 Sul MULTIPOLYGON (((-48.36966 -...
4314902 Porto Alegre 43 RS Rio Grande do Sul 4 Sul MULTIPOLYGON (((-51.28652 -...
5002704 Campo Grande 50 MS Mato Grosso do Sul 5 Centro Oeste MULTIPOLYGON (((-54.63729 -...
5103403 Cuiabá 51 MT Mato Grosso 5 Centro Oeste MULTIPOLYGON (((-56.01803 -...
5208707 Goiânia 52 GO Goiás 5 Centro Oeste MULTIPOLYGON (((-49.25743 -...
5300108 Brasília 53 DF Distrito Federal 5 Centro Oeste MULTIPOLYGON (((-47.81455 -...

Para construir o mapa, utilizaremos duas geometrias geom_sf(). A primeira é relativa ao mapa dos estados do Brasil. Já a segunda, às capitais dos estados. Portanto, para unir dois mapas distintos, devemos utilizar mais de uma geom_sf(), cada qual correspondente ao respectivo conjunto de dados.

ggplot() +
  geom_sf(data = estados) +
  geom_sf(data = capitais, fill = "red") +
  theme_bw()

Contudo, perceba que as capitais foram representadas a partir dos polígonos que delimitam suas áreas. Para representá-las mais adequadamente, podemos criar apenas pontos no mapa que indiquem suas localizações.

ggplot() +
  geom_sf(data = estados) +
  geom_point(
    data = capitais, aes(geometry = geom), 
    stat = "sf_coordinates", color = "red"
  ) +
  theme_bw()

Para isso, na geometria referente às capitais, substituimos a geom_sf() por geom_point(), declarando os argumentos stat = "sf_coordinates" e geometry = geom dentro do aes(), ambos para indicar que os dados considerados estão no formato sf e que desejamos representá-los por pontos no mapa.

Para inserir legendas com o nome das capitais e as abreviações dos nomes dos estados, utilizamos a função geom_sf_text(), como demonstrado na Seção 3.2.

ggplot() +
  geom_sf(data = estados) +
  geom_point(
    data = capitais, aes(geometry = geom), 
    stat = "sf_coordinates", color = "red"
  ) +
  geom_sf_text(data = estados, aes(label = abbrev_state), size = 2) +
  geom_sf_text(
    data = capitais, aes(label = name_muni), 
    size = 2, nudge_y = 0.7, nudge_x = 1
  ) +
  theme_bw()

Perceba que foram utilizadas duas geom_sf_text(), uma respectiva às abreviações dos estados e outra, ao nome das capitais. Os argumentos nudge_y = e nudge_x = servem para reordenar o posicionamento das legendas no mapa, cada qual referente ao eixo vertical e horizontal, respectivamente.

6.4 Sedes municipais

A função read_municipal_seat() nos retorna as prefeituras das cidades entre os anos de 1872 e 2010. Por definição, a prefeitura é uma sede municipal do poder executivo municipal.

read_municipal_seat(year = 2010, showProgress = FALSE) |>
  ggplot() +
  geom_sf() +
  theme_bw()

No exemplo seguinte, selecionaremos as prefeituras do estado de São Paulo.

read_municipal_seat(year = 2010, showProgress = FALSE) |> 
  dplyr::filter(abbrev_state == "SP") |> 
  ggplot() +
  geom_sf() +
  theme_bw()

Perceba que essa função nos retorna pontos no mapa, diferentemente dos exemplos anteriores que nos retornavam polígonos. Essa diferença pode ser percebida a partir da classe da coluna geom da função read_municipal_seat().

prefeituras <- read_municipal_seat(year = 2010, showProgress = FALSE)

class(prefeituras$geom)
#> [1] "sfc_POINT" "sfc"

Note que a classe da coluna é do tipo sfc_POINT, ou seja, uma classe que nos retorna pontos nos mapas.

Por outro lado, a classe da coluna geom da função read_municipality() é do tipo sfc_MULTIPOLYGON, portanto, nos retorna polígonos para formar os mapas.

municipios <- read_municipality(code_muni = "all", year = 2020, showProgress = FALSE)

class(municipios$geom)
#> [1] "sfc_MULTIPOLYGON" "sfc"

Com isso, temos a opção de unir em um único mapa os municípios e as prefeituras de um estado.

municipios_sp <- read_municipality(code_muni = "SP", year = 2010, showProgress = FALSE)

prefeituras_sp <- read_municipal_seat(year = 2010, showProgress = FALSE) |> 
  dplyr::filter(abbrev_state == "SP")
ggplot() +
  geom_sf(data = municipios_sp, fill = "#F8766D", color = "lightgrey") +
  geom_sf(data = prefeituras_sp, size = 1.1) +
  theme_bw()

A primeira geometria é correspondente ao mapa dos municípios de São Paulo, que foi sobreposto pela segunda geometria, referente ao mapa das prefeituras dos municípios de São Paulo.

7 Bairros, Subdistritos e Distritos

A função read_neighborhood() retorna os limites de bairros, subdistritos ou distritos de 720 municípios brasileiros. Os dados são baseados em agregações dos setores censitários brasileiro. Atualmente, apenas os dados de 2010 estão disponíveis.

read_neighborhood(year = 2010, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

Como exemplo, selecionaremos os limites dos bairros do município de Piracicaba/SP.

read_neighborhood(year = 2010, showProgress = FALSE) |> 
  filter(name_muni == "Piracicaba") |>
  ggplot() +
  geom_sf() +
  theme_bw()

Para destacar um bairro em específico, podemos utilizar as ferramentas do pacote gghighlight.

Com a função gghighlight(), destacaremos o bairro Agronomia, onde se localiza a ESALQ/USP.

read_neighborhood(year = 2010, showProgress = FALSE) |> 
  filter(name_muni == "Piracicaba") |>
  ggplot() +
  geom_sf() +
  gghighlight::gghighlight(name_neighborhood == "Agronomia") +
  geom_sf_text(aes(label = name_neighborhood), nudge_y = 0.003) +
  theme_bw()

8 Regiões Metropolitanas

A função read_metro_area() retorna as regiões metropolitanas do Brasil. Essas regiões são definidas a partir de legislações estaduais.

read_metro_area(year = 2018, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

Para inserir as regiões metropolitanas junto ao mapa dos estados brasileiros, utilizamos duas geometrias geom_sf().

estados <- read_state(code_state = "all", year = 2019, showProgress = FALSE)

reg_metrop <- read_metro_area(year = 2018, showProgress = FALSE)
ggplot() +
  geom_sf(data = estados) +
  geom_sf(data = reg_metrop, fill = "#CD832F") +
  theme_bw()

A seguir, representaremos as regiões metropolitanas do Rio de Janeiro.

rj_estado <- read_state(code_state = "RJ", year = 2018, showProgress = FALSE)

rj_metrop <- read_metro_area(year = 2018, showProgress = FALSE) |> 
  dplyr::filter(abbrev_state == "RJ")
ggplot() +
  geom_sf(data = rj_estado) +
  geom_sf(data = rj_metrop, fill = "#CD832F", color = "black") +
  theme_bw() +
  labs(title = "Regiões metropolitanas do Rio de Janeiro")

9 Áreas urbanas

A função read_urban_area() retorna as áreas urbanas do Brasil nos anos de 2005 e 2015, segundo metodologia do IBGE.

read_urban_area(year = 2015, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

No exemplo a seguir, ilustraremos as áreas urbanas de São Paulo.

# Dados dos municípios de SP
municipios_sp <- read_municipality(code_muni = "SP", year = 2015, showProgress = FALSE)

code_muni_sp <- data.frame(code_muni = municipios_sp$code_muni)

# Dados das áreas urbanas
urb <- read_urban_area(year = 2015, showProgress = FALSE)

# Selecionando as áreas urbanas de SP pelo código dos municípios
urb_sp <- inner_join(urb, code_muni_sp, by = join_by(code_muni))
ggplot() +
  geom_sf(data = municipios_sp, alpha = 0.5) +
  geom_sf(data = urb_sp, color = "#F8766D") +
  theme_bw() +
  labs(title = "Áreas urbanas de São Paulo em 2015")

10 Áreas mínimas comparáveis

A função read_comparable_areas() traz os dados das Áreas Mínimas Comparáveis (AMCs) dos municípios. Estes dados são referentes a área agregada do menor número de municípios necessários para que as comparações intertemporais sejam geograficamente consistentes.

Os dados estão disponíveis para qualquer combinação de anos censitários entre 1872 e 2010. Os conjuntos de dados são gerados com base no código Stata, originalmente desenvolvido por Philipp Ehrl (2017), sendo convertido para a linguagem R pela equipe desenvolvedora do pacote geobr.

read_comparable_areas(start_year = 1980, end_year = 2010, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

A função recebe os argumentos start_year = e end_year = para indicar o ano inicial e final, respectivamente, como referência do período a ser considerado para comparação.

Como resultado, a função gera um data frame com o código da área mínima comparável (code_amc) e uma lista com código(s) de municípios (list_code_muni_2010) respectivos à AMC do período em questão.

# Mapa à esquerda
read_comparable_areas(start_year = 1980, end_year = 2010, showProgress = FALSE) |> 
  filter(code_amc == 1021) |> 
  ggplot() +
  geom_sf() +
  theme_bw() +
  labs(title = "Área mínima comparável \n1980", x = "", y = "")

# Mapa à direita
read_municipality(code_muni = "all", year = 2010, showProgress = FALSE) |>
  filter(code_muni %in% c(1301001, 1301951)) |> 
  ggplot() +
  geom_sf() +
  geom_sf_text(aes(label = name_muni)) +
  theme_bw() +
  labs(title = "Municípios \n2010", x = "", y = "")

O mapa acima representa a AMC dos municípios de Carauari e Itamarati, no estado do Amazonas, no período entre 1980 e 2010.

11 Mapas temáticos

Depois de apresentadas algumas das funções presentes no pacote geobr, traremos alguns exemplos aplicados utilizando os mapas em conjunto com dados.

11.1 Censo agropecuário 2006 e 2017

Para as exemplificações, utilizaremos dados do Censo Agropecuário de 2006 e 2017, realizado pelo Instituto Brasileiro de Geografia e Estatística (IBGE). Dentre as diversas informações que o censo coleta, utilizaremos a área e o número de estabelecimentos agropecuários dos estados brasileiros e dos municípios de Mato Grosso.

Os dados foram coletados do Sistema IBGE de Recuperação Automática (SIDRA), a partir de duas fontes. Para 2006, utilizou-se a Tabela263 e para 2017, a Tabela 6754.

Para fazer o download dos dados compilados e processados, clique aqui.

censo_agro_06_17 <- readr::read_csv("dados/censo-agropec.csv")

dplyr::glimpse(censo_agro_06_17)
#> Rows: 195
#> Columns: 6
#> $ nivel      <chr> "UF", "UF", "UF", "UF", "UF", "UF", "UF", "UF", "UF", "UF",…
#> $ cod        <dbl> 11, 12, 13, 14, 15, 16, 17, 21, 22, 23, 24, 25, 26, 27, 28,…
#> $ localidade <chr> "Rondônia", "Acre", "Amazonas", "Roraima", "Pará", "Amapá",…
#> $ ano        <dbl> 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,…
#> $ n_estab    <dbl> 87078, 29483, 66784, 10310, 222029, 3527, 56567, 287039, 24…
#> $ area_estab <dbl> 84.33868, 35.28543, 36.68753, 17.17532, 229.25331, 8.73789,…

O conjunto de dados apresenta 195 observações e 6 variáveis, sendo elas:

  • nivel: o nível geográfico das observações, podendo ser um estado (UF) ou um município (MU);

  • cod: os códigos de identificação das localidades;

  • localidade: localidade dos estados brasileiros ou dos municípios de Mato Grosso;

  • ano: ano do censo agropecuário (2006 ou 2017);

  • n_estab: número de estabelecimentos;

  • area_estab: área dos estabelecimentos, a cada 100 mil hectares.

11.2 Dados agropecuários dos Estados

Nesta etapa, criaremos um mapa coroplético dos estados de acordo com o número e a área dos estabelecimentos agropecuários em cada ano. Um mapa coroplético é um tipo de mapa temático que representa uma superfície estatística por meio de áreas simbolizadas com cores, sombreamentos ou padrões de acordo com uma escala que representa a proporcionalidade da variável estatística.

Primeiramente, realizaremos algumas mudanças nos dados.

censo_estados <- censo_agro_06_17 |> 
  dplyr::filter(nivel == "UF") |> 
  dplyr::mutate(n_estab = n_estab / 1000) |> 
  tidyr::pivot_longer(
    cols = c(n_estab, area_estab),
    names_to = "var",
    values_to = "valores"
  )

censo_estados |> head(10)
#> # A tibble: 10 × 6
#>    nivel   cod localidade   ano var        valores
#>    <chr> <dbl> <chr>      <dbl> <chr>        <dbl>
#>  1 UF       11 Rondônia    2006 n_estab       87.1
#>  2 UF       11 Rondônia    2006 area_estab    84.3
#>  3 UF       12 Acre        2006 n_estab       29.5
#>  4 UF       12 Acre        2006 area_estab    35.3
#>  5 UF       13 Amazonas    2006 n_estab       66.8
#>  6 UF       13 Amazonas    2006 area_estab    36.7
#>  7 UF       14 Roraima     2006 n_estab       10.3
#>  8 UF       14 Roraima     2006 area_estab    17.2
#>  9 UF       15 Pará        2006 n_estab      222. 
#> 10 UF       15 Pará        2006 area_estab   229.

Na função dplyr::mutate(), convertemos os valores do número de estabelecimentos para cada mil estabelecimentos, a fim de adequar os valores para a representação no mapa. Posteriormente, realizamos a pivotagem das variáveis relativas aos estabelecimentos e áreas para as colunas var e valores.

Agora, precisamos carregar os dados geográficos dos estados a partir da função read_state().

mapa_estados <- read_state(code_state = "all", showProgress = FALSE)

Com os dados do censo agropecuário do estados e os dados geográficos dos estados, juntaremos ambos em um único data frame. Para isso, utilizamos a função dplyr::full_join(), tendo como referência as colunas name_state e code_state.

Portanto, antes de uni-las, iremos modificar os nomes das colunas do banco de dados referente ao censo, a fim padronizar as nomenclaturas e possibilitar a utilização da função de junção dos dados.

dados_mapa_estados <- censo_estados |>
  rename("name_state" = localidade, "code_state" = cod) |>
  dplyr::full_join(mapa_estados, censo_estados, by = c("name_state", "code_state"))

dados_mapa_estados |> head(10)
#> # A tibble: 10 × 10
#>    nivel code_state name_state   ano var        valores abbrev_state code_region
#>    <chr>      <dbl> <chr>      <dbl> <chr>        <dbl> <chr>              <dbl>
#>  1 UF            11 Rondônia    2006 n_estab       87.1 RO                     1
#>  2 UF            11 Rondônia    2006 area_estab    84.3 RO                     1
#>  3 UF            12 Acre        2006 n_estab       29.5 AC                     1
#>  4 UF            12 Acre        2006 area_estab    35.3 AC                     1
#>  5 UF            13 Amazonas    2006 n_estab       66.8 AM                     1
#>  6 UF            13 Amazonas    2006 area_estab    36.7 AM                     1
#>  7 UF            14 Roraima     2006 n_estab       10.3 RR                     1
#>  8 UF            14 Roraima     2006 area_estab    17.2 RR                     1
#>  9 UF            15 Pará        2006 n_estab      222.  PA                     1
#> 10 UF            15 Pará        2006 area_estab   229.  PA                     1
#> # ℹ 2 more variables: name_region <chr>, geom <MULTIPOLYGON [°]>

Feito isso, iniciaremos a confecção dos mapas, começando pelos dados do censo agropecuário de 2006.

dados_mapa_estados |> 
  filter(ano == 2006, var == "n_estab") |> 
  ggplot() +
  geom_sf(aes(fill = valores, geometry = geom))

O mapa coroplético acima representa o número de estabelecimentos agropecuários em 2006, de acordo com os estados. Para a sua confecção, primeiramente, filtramos o ano de 2006 e a variável relativa ao número de estabelecimentos (n_estab). Em seguida, dentro do aes() de geometria geom_sf() definimos a coluna de valores como parâmetro do argumento fill =, ou seja, os valores relativos ao número de estabelecimentos agropecuários serão preenchidos no mapa, de acordo com o estado. Já o argumento geometry = indica que a coluna geom apresenta os dados para a confecção do mapa.

Assim, de maneira bem simples, podemos confeccionar mapas coropléticos a partir do geobr e do ggplot2, junto a dados de interesse. A seguir, demontraremos um exemplo de como melhorar a estética do mapa.

dados_mapa_estados |> 
  filter(ano == 2006, var == "n_estab") |> 
  ggplot() +
  geom_sf(aes(fill = valores, geometry = geom)) +
  scale_fill_distiller(
    direction = 0,
    limits = c(0, 800),
    name = "Nº estabelecimentos (por 1000 und.)",
    guide = guide_legend(
      keyheight = unit(3, units = "mm"),
      keywidth=unit(12, units = "mm"),
      label.position = "bottom",
      title.position = 'top', nrow = 1
    )
  ) +
  labs(
    title = "Censo Agropecuário 2006",
    subtitle = "Número de estabelecimentos agropecuários por estado, a cada 1000 unidades",
    caption = "Fonte: IBGE - Censo Agropecuário 2006"
  ) +
  theme_void() +
  theme(
    plot.title = element_text(size = 15, hjust = 0.5),
    plot.subtitle = element_text(size = 10),
    plot.caption = element_text(size = 8, hjust = 0, vjust = 7),
    legend.position = c(0.88, 0.12)
  )

A função scale_fill_distiller() define a paleta de cores a ser utilizada, bem como os parâmetros referentes à legenda. A labs() permite inserir rótulos ao mapa, seja o título, subtítulo, fonte, dentre outros. Também definimos a temática estética do mapa ao definir o tamanho de letras e posicionamentos no mapa.

O mapa a seguir segue a mesma lógica do anterior, porém, representando a área dos estabelecimentos agropecuários e utilizando a paleta de cores da função scale_fill_gradient2().

dados_mapa_estados |> 
  filter(ano == 2006, var == "area_estab") |> 
  ggplot() +
  geom_sf(aes(fill = valores, geometry = geom)) +
  scale_fill_gradient2(
    limits = c(0, 550),
    name = "Área estabelecimentos (por 100 mil ha)",
    guide = guide_legend(
      keyheight = unit(3, units = "mm"),
      keywidth = unit(10, units = "mm"),
      label.position = "bottom",
      title.position = 'top', nrow = 1
    )
  ) +
  labs(
    title = "Censo Agropecuário 2006",
    subtitle = "Área dos estabelecimentos agropecuários por estado, a cada 100 mil hectares",
    caption = "Fonte: IBGE - Censo Agropecuário 2006"
  ) +
  theme_void() +
  theme(
    plot.title = element_text(size = 15, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5),
    plot.caption = element_text(size = 8, hjust = 0, vjust = 7),
    legend.position = c(0.88, 0.12)
  )

Também podemos juntar dois mapas temáticos. No exemplo a seguir, uniremos o mapa do número de estabelecimentos com a área, de acordo com o censo agropecuário de 2006.

dados_mapa_estados |> 
  filter(ano == 2006) |> 
  ggplot() +
  geom_sf(aes(fill = valores, geometry = geom)) +
  facet_wrap(
    ~var,
    labeller = as_labeller(
      c(area_estab = "Área estabelecimentos", n_estab = "Nº estabelecimentos")
    )
  ) +
  scale_fill_distiller(
    direction = 0,
    limits = c(0, 800),
    name = "Quantidade e Área estabelecimentos",
    guide = guide_legend(
      keyheight = unit(3, units = "mm"),
      keywidth = unit(11, units = "mm"),
      label.position = "bottom",
      title.position = 'top', nrow = 1
    )
  ) +
  labs(
    title = "Censo Agropecuário 2006",
    subtitle = "Quantidade e área de estabelecimentos agropecuários, por estado",
    caption = "Fonte: IBGE - Censo Agropecuário 2006"
  ) +
  theme_void() +
  theme(
    plot.title = element_text(size = 15, hjust = 0.5, vjust = 2),
    plot.subtitle = element_text(size = 11, hjust = 0.5, vjust = 2.5),
    plot.caption = element_text(size = 8, hjust = 0.5, vjust = -2),
    legend.position = c(0.49, 0.06)
  )

Para isso, utilizamos a função facet_wrap(), definindo a variável var como parâmetro para dividir os mapas. Além disso, dentro dessa mesma função, utilizamos a labeller = as_labeller() para alterar os nomes das observações que compõem a coluna var.

Podemos proceder da mesma forma para comparar o censo de 2006 com o de 2017, apenas alterando o parâmetro da função facet_wrap() para a coluna ano.

dados_mapa_estados |> 
  filter(var == "n_estab") |>
  ggplot() +
  geom_sf(aes(fill = valores, geometry = geom)) +
  facet_wrap(~ano) +
  scale_fill_distiller(
    direction = 0,
    limits = c(0, 800),
    name = "Nº estabelecimentos (por 1000 und.)",
    guide = guide_legend(
      keyheight = unit(3, units = "mm"),
      keywidth = unit(11, units = "mm"),
      label.position = "bottom",
      title.position = 'top', nrow = 1
    )
  ) +
  labs(
    title = "Censo Agropecuário 2006 e 2017",
    subtitle = "Número de estabelecimentos agropecuários por estado, a cada 1000 unidades",
    caption = "Fonte: IBGE - Censo Agropecuário 2006 e 2017"
  ) +
  theme_void() +
  theme(
    plot.title = element_text(size = 15, hjust = 0.5, vjust = 2),
    plot.subtitle = element_text(size = 11, hjust = 0.5, vjust = 2.5),
    plot.caption = element_text(size = 8, hjust = 0.5, vjust = -2),
    legend.position = c(0.49, 0.06)
  )

dados_mapa_estados |> 
  filter(var == "area_estab") |>
  ggplot() +
  geom_sf(aes(fill = valores, geometry = geom)) +
  facet_wrap(~ano) +
  scale_fill_distiller(
    direction = 0,
    limits = c(0, 800),
    name = "Área estabelecimentos (por 100 mil ha)",
    guide = guide_legend(
      keyheight = unit(3, units = "mm"),
      keywidth = unit(11, units = "mm"),
      label.position = "bottom",
      title.position = 'top', nrow = 1
    )
  ) +
  labs(
    title = "Censo Agropecuário 2006 e 2017",
    subtitle = "Área dos estabelecimentos agropecuários por estado, a cada 100 mil hectares",
    caption = "Fonte: IBGE - Censo Agropecuário 2006 e 2017"
  ) +
  theme_void() +
  theme(
    plot.title = element_text(size = 15, hjust = 0.5, vjust = 2),
    plot.subtitle = element_text(size = 11, hjust = 0.5, vjust = 2.5),
    plot.caption = element_text(size = 8, hjust = 0.5, vjust = -2),
    legend.position = c(0.49, 0.06)
  )

11.3 Municípios de Mato Grosso

Podemos proceder da mesma maneira para criar mapas coroplético a partir de outra dimensão geográfica. Nesse caso, faremos para os municípios do estado do Mato Grosso, de acordo com os dados do censo agropecuário de 2017. A lógica segue a mesma dos mapas confeccionados anteriormente.

# Organizando dados do censo agropecuário 2017
censo_muni_MT <- censo_agro_06_17 |> 
  filter(nivel == "MU") |> 
  mutate(n_estab = n_estab / 100) |> 
  pivot_longer(
    cols = c(n_estab, area_estab),
    names_to = "var",
    values_to = "valores"
  ) |> 
  rename("code_muni" = cod)

# Carregando dados dos municípios de MT
mapa_muni_MT <- read_municipality(code_muni = "MT", showProgress = FALSE)

# Juntando as bases de dados a partir da coluna `code_muni`
dados_mapa_muni_MT <- full_join(mapa_muni_MT, censo_muni_MT, by = "code_muni") |> 
  select(code_muni, name_muni, ano, var, valores, geom)
dados_mapa_muni_MT |> 
  filter(var == "n_estab") |>
  ggplot() +
  geom_sf(aes(fill = valores, geometry = geom)) +
  scale_fill_distiller(
    direction = 0,
    limits = c(0, 40),
    guide = guide_legend(
      keyheight = unit(5, units = "mm"),
      keywidth = unit(5, units = "mm"),
      label.position = "left")
  ) +
  labs(
    title = "Censo Agropecuário 2017",
    subtitle = "Número de estabelecimentos agropecuários por município de MT, a cada 100 unidades",
    caption = "Fonte: IBGE - Censo Agropecuário 2017",
    fill = NULL
  ) +
  theme_void() +
  theme(
    plot.title = element_text(size = 13, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5),
    plot.caption = element_text(size = 9, hjust = 0.5)
  )

dados_mapa_muni_MT |> 
  filter(var == "area_estab") |>
  ggplot() +
  geom_sf(aes(fill = valores, geometry = geom)) +
  scale_fill_gradient2(
    limits = c(0, 20),
    guide = guide_legend(
      keyheight = unit(5, units = "mm"),
      keywidth = unit(5, units = "mm"),
      label.position = "left"
    )
  ) +
  labs(
    title = "Censo Agropecuário 2017",
    subtitle = "Área dos estabelecimentos agropecuários por município de MT, a cada 100 mil hectares",
    caption = "Fonte: IBGE - Censo Agropecuário 2017",
    fill = NULL
  ) +
  theme_void() +
  theme(
    plot.title = element_text(size = 13, hjust = 0.5),
    plot.subtitle = element_text(size = 10, hjust = 0.5),
    plot.caption = element_text(size = 9, hjust = 0.5)
  )

dados_mapa_muni_MT |> 
  ggplot() +
  geom_sf(aes(fill = valores, geometry = geom)) +
  facet_wrap(
    ~var,
    labeller = as_labeller(
      c(area_estab = "Área estabelecimentos", n_estab = "Nº estabelecimentos"))
  ) +
  scale_fill_gradient2(
    limits = c(0, 40),
    guide = guide_legend(
      keyheight = unit(2, units = "mm"),
      keywidth = unit(7, units = "mm"),
      label.position = "bottom", nrow = 1
    )
  ) +
  labs(
    title = "Censo Agropecuário 2017",
    subtitle = "Quantidade e área de estabelecimentos agropecuários por município de MT",
    caption = "Fonte: IBGE - Censo Agropecuário 2017",
    fill = ""
  ) +
  theme_void() +
  theme(
    plot.title = element_text(size = 13, hjust = 0.5, vjust = 2),
    plot.subtitle = element_text(size = 10, hjust = 0.5, vjust = 2),
    plot.caption = element_text(size = 9, hjust = 0.5, vjust = -2),
    legend.position = c(0.52, 0.06)
  )

12 Biomas

O pacote geobr também possui um conjunto de dados para os biomas e a zona costeira do Brasil, baseado nos dados do IBGE - Biomas e Sistema Costeiro-Marinho. Para tanto, utilizamos a função read_biomes().

read_biomes(showProgress = FALSE) |> 
  ggplot() +
  geom_sf(aes(fill = name_biome)) +
  scale_fill_brewer(palette = "Pastel1") +
  theme_bw() +
  labs(fill = "Biomas")

A seguir, selecionaremos o bioma cerrado.

read_biomes(showProgress = FALSE) |> 
  dplyr::filter(name_biome == "Cerrado") |> 
  ggplot() +
  geom_sf() +
  theme_bw()

Para adicionar um bioma ou o sistema costeiro ao mapa do país, utilizamos dois tipos de geometrias.

brasil <- read_country(showProgress = FALSE)

sist_costeiro <- read_biomes(showProgress = FALSE) |> 
  dplyr::filter(name_biome == "Sistema Costeiro")
ggplot() +
  geom_sf(data = brasil) +
  geom_sf(data = sist_costeiro, aes(fill = name_biome)) +
  scale_fill_brewer(palette = "Blues") +
  theme_bw() +
  labs(fill = NULL)

No exemplo a seguir, adicionaremos os biomas no mapa do Brasil, dividido por estados.

estados <- read_state(code_state = "all", year = 2019, showProgress = FALSE)

biomas <- read_biomes(year = 2019, showProgress = FALSE)
ggplot() +
  geom_sf(data = biomas, aes(fill = name_biome), color = 0) +
  geom_sf(data = estados, alpha = 0, color = "antiquewhite4") +
  scale_fill_brewer(palette = "Pastel2") +
  theme_bw() +
  geom_sf_text(data = estados, aes(label = abbrev_state), size = 2) +
  labs(fill = "Biomas", x = NULL, y = NULL)

No mapa anterior, utilizamos duas geometrias, cada qual respectiva a um tipo de dado geoespacial. No caso da geometria referente aos biomas (data = biomas), preenchemos com os tipos de biomas (fill = name_biome) e retiramos as cores das bordas com o color = 0. Em seguida, inserimos o mapa dos estados (data = estados), retirando a coloração interna com o argumento alpha = 0 e mantemos as linhas que demarcam os estados.

14 Semiárido

A função read_semiarid() retorna os municípios que compunham o semiárido brasileiro nos anos de 2005 e 2017, baseado nos dados do IBGE - Semiárido Brasileiro.

read_semiarid(year = 2005, showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

Podemos inserir os municípios do semiárido no mapa do Brasil dividido por estados.

estados <- read_state(code_state = "all", year = 2019, showProgress = FALSE)

semiarido <- read_semiarid(showProgress = FALSE)
ggplot() +
  geom_sf(data = semiarido, fill = "#F8766D") +
  geom_sf(data = estados, alpha = 0) +
  theme_bw()

Para retirar as linhas de contorno dos municípios, declaramos o argumento color = 0 na geometria referente aos municípios do semiárido.

ggplot() +
  geom_sf(data = semiarido, fill = "#F8766D", color = 0) +
  geom_sf(data = estados, alpha = 0) +
  theme_bw()

Por fim, podemos comparar as áreas do semiárido entre os anos de 2005 e 2017.

# Mapa à esquerda
semiarido_05 <- read_semiarid(year = 2005, showProgress = FALSE)

abbr_semiarido_05 <- as.vector(unique(semiarido_05$abbrev_state))

read_state(code_state = "all", showProgress = FALSE) |> 
  dplyr::filter(abbrev_state %in% abbr_semiarido_05) |> 
  ggplot() + 
  geom_sf(data = semiarido_05, fill = "#F8766D", color = 0) +
  geom_sf(alpha = 0) +
  theme_bw() +
  labs(title = "2005", x = NULL, y = NULL) +
  geom_sf_text(aes(label = abbrev_state), size = 2.3)

# Mapa à direita
semiarido_17 <- read_semiarid(year = 2017, showProgress = FALSE)

abbr_semiarido_17 <- as.vector(unique(semiarido_17$abbrev_state))

read_state(code_state = "all", showProgress = FALSE) |> 
  dplyr::filter(abbrev_state %in% abbr_semiarido_17) |> 
  ggplot() + 
  geom_sf(data = semiarido_17, fill = "#F8766D", color = 0) +
  geom_sf(alpha = 0) +
  theme_bw() +
  labs(title = "2017", x = NULL, y = NULL) +
  geom_sf_text(aes(label = abbrev_state), size = 2.3)

15 Áreas de conservação

Para ilustrar as áreas de conservação do Brasil, utilizamos a função read_conservation_units(). A última atualização foi feita em setembro de 2019, baseada nos dados do Ministério do Meio Ambiente (MMA).

areas_conservacao <- read_conservation_units(date = 201909, showProgress = FALSE)

dim(areas_conservacao)
#> [1] 1934   15
names(areas_conservacao)
#>  [1] "code_conservation_unit" "name_conservation_unit" "id_wcm"                
#>  [4] "category"               "group"                  "government_level"      
#>  [7] "creation_year"          "gid7"                   "quality"               
#> [10] "legislation"            "dt_ultim10"             "code_u111"             
#> [13] "name_organization"      "date"                   "geom"

A base de dados possui 1934 áreas de conservação registradas, sendo divididas por código da unidade de conservação (code_conservation_unit), nome da unidade de conservação (name_conservation_unit), categoria da unidade de conservação (category), nivel governamental (government_level), ano da criação (creation_year), nome da organização responsável (name_organization), dentre outros.

estados <- read_state(code_state = "all", year = 2019, showProgress = FALSE)

ggplot() +
  geom_sf(data = areas_conservacao, fill = "lightgreen") +
  geom_sf(data = estados, alpha = 0) +
  theme_bw()

16 Terras indígenas

A função read_indigenous_land() apresenta as áreas de terras indígenas. O respectivo conjunto de dados abrange todas as terras indígenas, de todas as etnias e em diferentes estágios de demarcação. Os dados são de setembro de 2019 e março de 2021, oriundos da Fundação Nacional do Índio (FUNAI).

estados <- read_state(code_state = "all", year = 2019, showProgress = FALSE)

read_indigenous_land(date = 201907, showProgress = FALSE) |> 
  ggplot() +
  geom_sf(fill = "#ED8141") +
  geom_sf(data = estados, alpha = 0) +
  theme_bw()

A seguir, selecionaremos as áreas de terras indígenas no Acre em 2019.

estado_acre <- read_municipality(code_muni = "all", year = 2019, showProgress = FALSE) |> 
  dplyr::filter(abbrev_state == "AC")

terra_indigena_acre <- read_indigenous_land(date = 201907, showProgress = FALSE) |> 
  filter(abbrev_state == "AC")
ggplot() +
  geom_sf(data = estado_acre) +
  geom_sf(data = terra_indigena_acre, fill = "#929200") +
  theme_bw()

Agora, distinguiremos as áreas de acordo com a etnia da população.

ggplot() +
  geom_sf(data = estado_acre) +
  geom_sf(data = terra_indigena_acre, aes(fill = etnia_nome)) +
  theme_bw() +
  labs(fill = "Etnia")

Por fim, separaremos as terras indígenas por estágio de demarcação.

ggplot() +
  geom_sf(data = estado_acre) +
  geom_sf(data = terra_indigena_acre, aes(fill = fase_ti)) +
  theme_bw() +
  labs(fill = "Estágio de\ndemarcação")

17 Áreas de risco de desastres naturais

A função read_disaster_risk_area() retorna dados oficiais de áreas de risco de desastres naturais no Brasil em 2010, baseado na metodologia do IBGE e CEMADEN. As informações se concentram em desastres geodinâmicos e hidrometeorológicos capazes de desencadear deslizamentos de terra e inundações.

Cada polígono de área de risco (conhecido como BATER) possui um código de identificação (geo_bater). O conjunto de dados traz informações sobre o quanto os polígonos das áreas de risco se sobrepõem aos setores censitários e faces do bloco (acuracia) e o número de áreas dentro de cada área de risco (num).

estados <- read_state(code_state = "all", year = 2019, showProgress = FALSE)

read_disaster_risk_area(showProgress = FALSE) |>
  ggplot() +
  geom_sf(data = estados, fill = "white") +
  geom_sf(fill = "#2D3E50", color = "#FEBF57", size = .15) +
  theme_bw()

O mapa a seguir ilustra as áreas de risco no estado do Rio de Janeiro.

rj <- read_state(code_state = "RJ", year = 2019, showProgress = FALSE)

read_disaster_risk_area(year = 2010, showProgress = FALSE) |>
  dplyr::filter(abbrev_state == "RJ") |>
  ggplot() +
  geom_sf(data = rj, alpha = 0) +
  geom_sf(fill = "#2D3E50", color = "#FEBF57", size = .15) +
  theme_bw()

Por fim, as áreas de risco no município de Petrópolis/RJ.

lookup_muni(name_muni = "Petrópolis") |> dplyr::glimpse()
#> Rows: 1
#> Columns: 13
#> $ code_muni         <int> 3303906
#> $ name_muni         <chr> "Petrópolis"
#> $ code_state        <int> 33
#> $ name_state        <chr> "Rio de Janeiro"
#> $ abbrev_state      <chr> "RJ"
#> $ code_micro        <int> 33015
#> $ name_micro        <chr> "Serrana"
#> $ code_meso         <int> 3306
#> $ name_meso         <chr> "Metropolitana do Rio de Janeiro"
#> $ code_immediate    <int> 330007
#> $ name_immediate    <chr> "Petrópolis"
#> $ code_intermediate <int> 3303
#> $ name_intermediate <chr> "Petrópolis"

petropolis <- read_municipality(code_muni = 3303906, showProgress = FALSE)
read_disaster_risk_area(year = 2010, showProgress = FALSE) |>
  dplyr::filter(name_muni == "Petropolis") |>
  ggplot() +
  geom_sf(data = petropolis, alpha = 0) +
  geom_sf(fill = "#2D3E50", color = "#FEBF57", size = .15) +
  theme_bw()

18 Estabelecimentos de saúde

A função read_health_facilities() nos retorna os estabelecimentos de saúde presentes nos municípios brasileiros. Os dados são provenientes do Cadastro Nacional de Estabelecimentos de Saúde (CNES), originalmente coletados pelo Ministério da Saúde do Brasil.

Segundo o Ministério da Saúde, as coordenadas de cada unidade foram obtidas pelo CNES e validadas por meio de operações espaciais. Essas operações verificam se o ponto está no município, considerando um raio de 5.000 metros. Quando a coordenada não está correta, outras buscas são feitas em outros sistemas do Ministério da Saúde, como o DataSUS e em serviços web, como o Google Maps. Por fim, se as coordenadas foram obtidas corretamente neste processo, são utilizadas as coordenadas da sede municipal.

A fonte do geocódigo utilizada está presente na coluna data_source do banco de dados. A data da última atualização dos dados é registrada nas colunas date_update e year_update. Além disso, cada estabelecimento de saúde apresenta um código de identificação, presente na coluna code_cnes.

read_health_facilities(showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

A seguir, ilustraremos os estabelecimentos de saúde do município de Piracicaba/SP.

lookup_muni(name_muni = "Piracicaba") |> dplyr::glimpse()
#> Rows: 1
#> Columns: 13
#> $ code_muni         <int> 3538709
#> $ name_muni         <chr> "Piracicaba"
#> $ code_state        <int> 35
#> $ name_state        <chr> "São Paulo"
#> $ abbrev_state      <chr> "SP"
#> $ code_micro        <int> 35028
#> $ name_micro        <chr> "Piracicaba"
#> $ code_meso         <int> 3506
#> $ name_meso         <chr> "Piracicaba"
#> $ code_immediate    <int> 350040
#> $ name_immediate    <chr> "Piracicaba"
#> $ code_intermediate <int> 3510
#> $ name_intermediate <chr> "Campinas"

piracicaba <- read_municipality(code_muni = 3538709, year = 2020, showProgress = FALSE)

piracicaba_estab_saude <- read_health_facilities(showProgress = FALSE) |> 
  dplyr::filter(code_muni == 353870)
ggplot() +
  geom_sf(data = piracicaba) +
  geom_sf(data = piracicaba_estab_saude) +
  theme_bw()

Vale destacar que na função read_health_facilities(), os códigos de identificação dos municípios (code_muni) estão representados pelos 6 primeiros dígitos dos 7 dígitos que compõe o código original. Por tanto, quando utilizar os códigos do municípios na função read_health_facilities(), use apenas os 6 primeiros dígitos.

19 Regiões de saúde

A função read_health_region() contém os dados das regiões de saúde no Brasil nos anos de 1991, 1994, 1997, 2001, 2005 e 2013.

Estes dados são utilizados para orientar o planejamento regional e estadual dos serviços de saúde. Dentro disso, temos as macrorregiões de saúde que, em particular, são utilizadas para orientar o planejamento dos serviços de saúde de alta complexidade, serviços estes que envolvem maior economia de escala e estão concentrados em poucos municípios, pois geralmente são mais intensivos em tecnologia, onerosos e enfrentam escassez de profissionais especializados. Uma macrorregião compreende uma ou mais regiões de saúde.

# Mapa à esquerda
read_health_region(year = 2013, macro = FALSE, showProgress = FALSE) |>
  ggplot() +
  geom_sf() +
  theme_bw() +
  labs(title = "Regiões de saúde")

# Mapa à direita
read_health_region(year = 2013, macro = TRUE, showProgress = FALSE) |>
  ggplot() +
  geom_sf() +
  theme_bw() +
  labs(title = "Macrorregiões de saúde")

O argumento macro = aceita valores lógicos para representar as macrorregiões de saúde (macro = TRUE) ou representar apenas as regiões de saúde (macro = FALSE). Por padrão, caso não seja especificado o argumento, macro = FALSE.

Os mapas a seguir ilustram as regiões e macrorregiões de saúde do estado de Goiás.

# Mapa à esquerda
read_health_region(year = 2013, macro = FALSE, showProgress = FALSE) |>
  dplyr::filter(abbrev_state == "GO") |> 
  ggplot() +
  geom_sf() +
  theme_bw() +
  labs(title = "Regiões de saúde - GO") +
  geom_sf_text(aes(label = name_health_region), size = 1.8)

# Mapa à direita
read_health_region(year = 2013, macro = TRUE, showProgress = FALSE) |>
  dplyr::filter(abbrev_state == "GO") |> 
  ggplot() +
  geom_sf() +
  theme_bw() +
  labs(title = "Macrorregiões de saúde - GO") +
  geom_sf_text(aes(label = name_health_macroregion), size = 1.8)

20 Escolas

A função read_schools() contém os dados do Censo Escolar coletados pelo Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira (INEP) para o ano de 2020.

O conjunto de dados possui diversas informações, como o nome da escola (name_school), o nível escolar (education_level), tipos de administração (admin_category, government_level, private_school_type, private_government_partnership), dentre outras.

read_schools(year = 2020, showProgress = FALSE) |>
  ggplot() +
  geom_sf() +
  theme_bw()

A seguir, selecionaremos as escolas de Piracicaba/SP, categorizadas por tipo de administração.

piracicaba <- read_municipality(code_muni = 3538709, year = 2020, showProgress = FALSE)

read_schools(year = 2020, showProgress = FALSE) |>
  dplyr::filter(name_muni == "Piracicaba") |>
  ggplot() +
  geom_sf(data = piracicaba) +
  geom_sf(aes(color = government_level), size = 1.5) +
  theme_bw() +
  labs(color = "Tipo administrativo")

21 Áreas de Concentração de População

A função read_urban_concentrations() lê os dados oficiais do IBGE sobre as áreas de concentração de população no Brasil.

O conjunto de dados traz como variáveis o nome das áreas de concentração urbana (name_urban_concentration), bem como os nomes dos municípios e estados que fazem parte. Além disso, as colunas pop_total_2010, pop_urban_2010 e pop_rural_2010 trazem o número da população total, urbana e rural, respectivamente, de acordo com o Censo 2010 realizado pelo IBGE.

estados <- read_state(code_state = "all", year = 2019, showProgress = FALSE)

read_urban_concentrations(year = 2015, showProgress = FALSE) |> 
  ggplot() +
  geom_sf(data = estados, alpha = 0) +
  geom_sf(fill = "#B0001D") +
  theme_bw()

O mapa a seguir ilustra as áreas de concentração urbana de São Paulo.

municipios_sp <- read_municipality(code_muni = "SP", year = 2010, showProgress = FALSE)

read_urban_concentrations(year = 2015, showProgress = FALSE) |> 
  dplyr::filter(abbrev_state == "SP") |> 
  ggplot() +
  geom_sf(data = municipios_sp, fill = "lightgrey") +
  geom_sf(fill = "#B0001D") +
  theme_bw()

Também temos a possibilidade de fazer um mapa de calor com a população urbana das áreas de concentração. O exemplo a seguir ilustra o estado do Paraná.

municipios_pr <- read_municipality(code_muni = "PR", year = 2010, showProgress = FALSE)

read_urban_concentrations(year = 2015, showProgress = FALSE) |> 
  dplyr::filter(abbrev_state == "PR") |>
  ggplot() +
  geom_sf(data = municipios_pr, fill = "lightgrey") +
  geom_sf(aes(fill = pop_urban_2010)) +
  scale_fill_viridis_c(direction = -1, limits = c(3000, 1750000)) +
  theme_bw() +
  labs(fill = "População urbana")

Para isso, utilizamos os dados da variável pop_urban_2010 que contém a população urbana das áreas de concentração do Paraná. Com a função scale_fill_viridis_c() definimos os limites de escala a serem considerados no mapa de calor, tendo valor mínimo de 3.000 e máximo de 1.750.000 habitantes.

22 Arranjos populacionais

A função read_pop_arrangements() retorna os dados oficiais sobre arranjos populacionais, que são agrupamentos de dois ou mais municípios com forte integração populacional, devido aos movimentos pendulares para trabalho ou estudo, ou à contiguidade entre manchas urbanas. Os dados originais são do Instituto Brasileiro de Geografia e Estatística (IBGE).

De modo semelhante aos dados das áreas de concentração urbana, este conjunto de dados contém a nomenclatura dos arranjos populacionais (name_pop_arrangement), o município e estado que faz parte e as populações totais, urbana e rural do arranjo, de acordo com o Censo 2010.

read_pop_arrangements(year = 2015, showProgress = FALSE) |>
  ggplot() +
  geom_sf() +
  theme_bw()

Os arranjos populacionais do estado do Rio de Janeiro estão ilustrados a seguir, bem como o mapa de calor da população total.

municipios_rj <- read_municipality(code_muni = "RJ", showProgress = FALSE)

read_pop_arrangements(year = 2015, showProgress = FALSE) |>
  dplyr::filter(abbrev_state == "RJ") |> 
  ggplot() +
  geom_sf(data = municipios_rj) +
  geom_sf(fill = "#B07600") +
  theme_bw()

municipios_rj <- read_municipality(code_muni = "RJ", showProgress = FALSE)

read_pop_arrangements(year = 2015, showProgress = FALSE) |>
  dplyr::filter(abbrev_state == "RJ") |> 
  ggplot() +
  geom_sf(data = municipios_rj) +
  geom_sf(aes(fill = pop_total_2010)) +
  scale_fill_viridis_c(direction = -1, limits = c(8000, 6400000)) +
  theme_bw() +
  labs(fill = "População \ntotal")

23 Setor censitário

O setor censitário é a unidade territorial estabelecida pelo IBGE para planejar e realizar levantamentos de dados do Censo e Pesquisas Estatísticas. É formado por uma área contínua, considerando a Divisão Político-Administrativa, situada em um único quadro urbano ou rural, com dimensão e número de domicílios que permitam o levantamento das informações por um recenseador dentro do prazo determinado para a coleta. Assim sendo, cada recenseador procederá à coleta de informações tendo como meta a cobertura do setor censitário que lhe é designado.

A função read_census_tract() nos retorna os dados do setor censitário para os anos de 2000, 2010, 2017, 2019 e 2020.

read_census_tract(code_tract = "all", year = 2020, showProgress = FALSE)

O argumento code_tract = pode receber o valore "all" para selecionar todos os dados dos setores censitários do Brasil; um código ou abreviação do estado; e um código de 7 dígitos referentes aos municípios.

Como exemplo, selecionaremos os setores censitários de Sergipe em 2010, divididos por zona rural e urbana.

read_census_tract(code_tract = "SE", year = 2010, showProgress = FALSE) |> 
  ggplot() +
  geom_sf(aes(fill = zone)) +
  theme_bw() +
  labs(fill = "Zona")

No caso dos setores censitários do ano de 2000, as zonas rural e urbana estão em bases de dados separadas. Para isso, precisamos utilizar o argumento zone = para especificar a zona rural (zone = "rural") ou urbana (zone = "urban"). Caso o argumento não seja declarado, por padrão, adota-se a zona urbana.

# Mapa à esquerda
read_census_tract(code_tract = "SE", year = 2000, zone = "rural", showProgress = FALSE) |>
  ggplot() +
  geom_sf() +
  theme_bw() +
  labs(title = "Setor censitário - Área rural \nSergipe, 2000")

# Mapa à direita
read_census_tract(code_tract = "SE", year = 2000, zone = "urban", showProgress = FALSE) |>
  ggplot() +
  geom_sf() +
  theme_bw() +
  labs(title = "Setor censitário - Área urbana \nSergipe, 2000")

24 Áreas de ponderação

Segundo o IBGE, área de ponderação é definida como sendo uma unidade geográfica, formada por um agrupamento mutuamente exclusivo de setores censitários contíguos, para a aplicação dos procedimentos de calibração dos pesos de forma a produzir estimativas compatíveis com algumas das informações conhecidas para a população como um todo.

A função read_weighting_area() nos retorna as áreas de ponderação para o ano de 2010.

read_weighting_area(code_weighting = "all", showProgress = FALSE) |> 
  ggplot() +
  geom_sf() +
  theme_bw()

A seguir, selecionaremos as áreas de ponderação do Distrito Federal e do município de Maceió/AL.

read_weighting_area(code_weighting = "DF", year = 2010, showProgress = FALSE) |>
  ggplot() +
  geom_sf() +
  theme_bw() +
  labs(title = "Distrito Federal")

lookup_muni(name_muni = "Maceió") |> dplyr::glimpse()
#> Rows: 1
#> Columns: 13
#> $ code_muni         <int> 2704302
#> $ name_muni         <chr> "Maceió"
#> $ code_state        <int> 27
#> $ name_state        <chr> "Alagoas"
#> $ abbrev_state      <chr> "AL"
#> $ code_micro        <int> 27011
#> $ name_micro        <chr> "Maceió"
#> $ code_meso         <int> 2703
#> $ name_meso         <chr> "Leste Alagoano"
#> $ code_immediate    <int> 270001
#> $ name_immediate    <chr> "Maceió"
#> $ code_intermediate <int> 2701
#> $ name_intermediate <chr> "Maceió"

read_weighting_area(code_weighting = 2704302, showProgress = FALSE) |>
  ggplot() +
  geom_sf() +
  theme_bw() +
  labs(title = "Maceió/AL")

25 Grade estatística do IBGE

Segundo o IBGE, as grades estatísticas são uma forma de disseminação de dados que permite análises detalhadas e independentes das divisões territoriais, visando atender, principalmente, a necessidade de se ter dados em unidades geográficas pequenas e estáveis ao longo do tempo, facilitando a comparação nacional e internacional e fornecendo um aumento significativo do detalhamento, particularmente nas regiões rurais, em comparação com metodologias anteriores.

A função read_statistical_grid() nos retorna as grades estatísticas do IBGE, com dimensão de 200 x 200 metros para o ano de 2010. Cada quadrante das grades são representados por um código de 7 dígitos.

read_statistical_grid(code_grid = "all", year = 2010, showProgress = FALSE)

A grid_state_correspondence_table carrega uma tabela de correspondência indicando quais quadrantes da grade estatística do IBGE se cruzam com cada estado.

grid_state_correspondence_table |> head(10)
#>    name_state abbrev_state code_grid
#> 1        Acre           AC     ID_50
#> 2        Acre           AC     ID_51
#> 3        Acre           AC     ID_60
#> 4        Acre           AC     ID_61
#> 65    Alagoas           AL     ID_57
#> 66    Alagoas           AL     ID_58
#> 23      Amapá           AP     ID_74
#> 24      Amapá           AP     ID_75
#> 25      Amapá           AP     ID_84
#> 26      Amapá           AP     ID_85

Devido à grande quantidade de informação contida na função read_statistical_grid(), apenas ilustraremos o seu código.

Resumo

O pacote geobr integrado com o tidyverse apresenta uma grande variedade de funções para ilustrar diversos mapas do Brasil, sobre os mais variados temas.

Existem alguns pacotes análogos ao geobr que tratam de mapas de outros países e continentes. Esses pacotes estão listados na página do GitHub do próprio pacote geobr.

Caso o leitor tenha interesse em conhecer mais sobre a elaboração de mapas com o ggplot2, recomendo o capítulo 6 do livro ggplot2: Elegant Graphics for Data Analysis.

Notas de rodapé

  1. Para saber mais sobre as simple features (sf), confira o seguinte texto: https://r-spatial.github.io/sf/articles/sf1.html.↩︎