install.packages("geobr")
install.packages("tidyverse")
Mapas do Brasil em R
Integrando os pacotes geobr e tidyverse
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.
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()
.
list_geobr() |> View()
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.
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.
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
.
install.packages("gghighlight")
library(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)
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")
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))
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.
13 Amazônia Legal
A função read_amazon()
nos retorna a área da Amazônia Legal Brasileira, definida pela lei n.12.651/2012. Os dados são do Ministério do Meio Ambiente (MMA).
read_amazon(showProgress = FALSE) |>
ggplot() +
geom_sf() +
theme_bw()
O mapa a seguir ilustra a área da Amazônia Legal Brasileira delimitada pelos estados.
estados <- read_state(code_state = "all", showProgress = FALSE)
amazonia_legal <- read_amazon(showProgress = FALSE)
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.
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)
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)
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é
Para saber mais sobre as simple features (sf), confira o seguinte texto: https://r-spatial.github.io/sf/articles/sf1.html.↩︎