The geobr package provides quick and easy access to shapefiles of the Brazilian Institute of Geography and Statistics (IBGE) and other official spatial data sets of Brazil. The syntax of all geobr functions operate a simple logic that allows users to easily download a wide variety of official spatial data sets with updated geometries, harmonized attributes and geographic projections across geographies and years. This vignette presents is a quick intro to geobr.
The package will soon be available on CRAN. In the meantime, you can install it using the devtools
package.
# Load geobr and other libraries we'll use
library(geobr)
#> Loading required namespace: sf
library(ggplot2)
library(sf)
#> Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(rio)
sf
objectsThe territory of Brazil is organized in political-administrative and statistical areas at different levels: * Country * States * Regions * Meso regions * Micro regions * Municipalities * Census weighting areas * Census tracts * Statistical Grid
The syntax of all geobr functions operate one the same logic, so the code to download and read those geographies is quite intuitive. Here are a few examples. Note the number of polygons and boundaries at each geographic level has changed over the years years, so it’s important to specify the year
of reference you want to download.
Read an specific geographic area at a given year
# download data
state <- read_state(code_state="SE", year=2018) # State
micro <- read_micro_region(code_micro=160101, year=2000) # Micro region
Read all geographic areas within a state at a given year
# download data
meso <- read_meso_region(code_meso="PA", year=2018) # Meso region
muni <- read_municipality(code_muni= "AL", year=2007) # Municipality
The user can also read all geographic areas in the country in a single line of code.
Once you’ve downloaded the data, it is really simple to plot maps using ggplot2
.
# No plot axis
no_axis <- theme(axis.title=element_blank(),
axis.text=element_blank(),
axis.ticks=element_blank())
# Plot all Brazilian states
ggplot() +
geom_sf(data=state, fill="#2D3E50", color="#FEBF57", size=.15, show.legend = FALSE) +
labs(subtitle="States", size=8) +
theme_minimal() +
no_axis
All the municipalities of a particular state, such as Rio de Janeiro:
# Download all municipalities of Rio
all_muni <- read_municipality( code_muni = "RJ", year= 2000)
#>
|
| | 0%
|
|= | 1%
|
|= | 2%
|
|== | 3%
|
|== | 4%
|
|=== | 4%
|
|=== | 5%
|
|==== | 6%
|
|==== | 7%
|
|===== | 7%
|
|===== | 8%
|
|====== | 9%
|
|====== | 10%
|
|======= | 10%
|
|======= | 11%
|
|======== | 12%
|
|======== | 13%
|
|========= | 14%
|
|========= | 15%
|
|========== | 15%
|
|========== | 16%
|
|=========== | 16%
|
|=========== | 17%
|
|============ | 18%
|
|============= | 19%
|
|============= | 20%
|
|============= | 21%
|
|============== | 21%
|
|============== | 22%
|
|=============== | 23%
|
|=============== | 24%
|
|================ | 24%
|
|================ | 25%
|
|================= | 25%
|
|================= | 26%
|
|================= | 27%
|
|================== | 27%
|
|================== | 28%
|
|=================== | 29%
|
|==================== | 30%
|
|==================== | 31%
|
|===================== | 32%
|
|===================== | 33%
|
|====================== | 34%
|
|======================= | 35%
|
|======================= | 36%
|
|======================== | 36%
|
|======================== | 37%
|
|========================= | 38%
|
|========================= | 39%
|
|========================== | 40%
|
|========================== | 41%
|
|=========================== | 41%
|
|============================ | 42%
|
|============================ | 43%
|
|============================ | 44%
|
|============================= | 44%
|
|============================= | 45%
|
|============================== | 46%
|
|============================== | 47%
|
|=============================== | 47%
|
|=============================== | 48%
|
|================================ | 49%
|
|================================ | 50%
|
|================================= | 50%
|
|================================= | 51%
|
|================================== | 52%
|
|================================== | 53%
|
|=================================== | 54%
|
|==================================== | 55%
|
|==================================== | 56%
|
|===================================== | 57%
|
|===================================== | 58%
|
|====================================== | 58%
|
|======================================= | 59%
|
|======================================= | 60%
|
|======================================== | 61%
|
|======================================== | 62%
|
|========================================= | 63%
|
|========================================== | 64%
|
|========================================== | 65%
|
|=========================================== | 66%
|
|============================================ | 67%
|
|============================================ | 68%
|
|============================================= | 69%
|
|============================================= | 70%
|
|============================================== | 70%
|
|============================================== | 71%
|
|=============================================== | 72%
|
|================================================ | 74%
|
|================================================ | 75%
|
|================================================= | 75%
|
|================================================= | 76%
|
|================================================== | 76%
|
|================================================== | 77%
|
|=================================================== | 78%
|
|=================================================== | 79%
|
|==================================================== | 79%
|
|==================================================== | 80%
|
|===================================================== | 81%
|
|===================================================== | 82%
|
|====================================================== | 83%
|
|======================================================= | 84%
|
|======================================================= | 85%
|
|======================================================== | 86%
|
|======================================================== | 87%
|
|========================================================= | 88%
|
|========================================================== | 90%
|
|=========================================================== | 90%
|
|=========================================================== | 91%
|
|=========================================================== | 92%
|
|============================================================ | 92%
|
|============================================================ | 93%
|
|============================================================= | 93%
|
|============================================================= | 94%
|
|============================================================== | 95%
|
|============================================================== | 96%
|
|=============================================================== | 96%
|
|=============================================================== | 97%
|
|=============================================================== | 98%
|
|================================================================ | 98%
|
|================================================================ | 99%
|
|=================================================================| 100%
# plot
ggplot() +
geom_sf(data=all_muni, fill="#2D3E50", color="#FEBF57", size=.15, show.legend = FALSE) +
labs(subtitle="Municipalities of Rio de Janeiro, 2000", size=8) +
theme_minimal() +
no_axis
The next step is to combine data from geobr package with other data sets to create thematic maps. In this example, we will be using data from the (Atlas of Human Development (a project of our colleagues at Ipea)[http://atlasbrasil.org.br/2013/pt/download/] to create a choropleth map showing the spatial variation of Life Expectancy at birth across Brazilian states.
First, we need to download the Life Expectancy data set and merge it to our spatial database. The two-digit abbreviation of state names is our key to join these two databases.
# download Life Expectancy data
adh <- rio::import("http://atlasbrasil.org.br/2013/data/rawData/Indicadores%20Atlas%20-%20RADAR%20IDHM.xlsx", which = "Dados")
# keep only information for the year 2010 and the columns we want
adh <- subset(adh, ANO == 2014)
# Download the sf of all Brazilian states
all_states <- read_state(code_state= "all", year= 2014)
#>
|
| | 0%
|
|== | 4%
|
|===== | 7%
|
|======= | 11%
|
|========== | 15%
|
|============ | 19%
|
|============== | 22%
|
|================= | 26%
|
|=================== | 30%
|
|====================== | 33%
|
|======================== | 37%
|
|========================== | 41%
|
|============================= | 44%
|
|=============================== | 48%
|
|================================== | 52%
|
|==================================== | 56%
|
|======================================= | 59%
|
|========================================= | 63%
|
|=========================================== | 67%
|
|============================================== | 70%
|
|================================================ | 74%
|
|=================================================== | 78%
|
|===================================================== | 81%
|
|======================================================= | 85%
|
|========================================================== | 89%
|
|============================================================ | 93%
|
|=============================================================== | 96%
|
|=================================================================| 100%
# joind the databases
all_states <-left_join(all_states, adh, by = c("abbrev_state" = "NOME_AGREGA"))