Este breve tutorial reproduz um exemplo originalmente publicado via github.
A duvida surgiu em uma tentativa de elaboraçao de mapas sobre indicadores fiscais dos municipios brasileiros. Em uma busca no bom e velho google, a maior parte dos tutoriais do ggplot2 (como esse) já partem de um data.frame contendo colunas “lat” e “long”, enquanto eu tinha em mãos um .shp de polígonos.
Felizmente, uma soluçao foi encontrada, fornecendo todo o passo-a-passo desde a obtençao de arquivos de poligonos (ecorregioes da plataforma Aquatic Resource Monitoring) até a confexão de mapas temáticos usando a teconologia do ggplot2.
Primeiramente, é necessário carregar os pacotes necessários. No caso, usaremos os pacotes ‘rgdal’ para carregar os arquivos .shp e o ‘ggplot2’ para fazer os mapas. Os pacotes ‘maptools’ e ‘plyr’ tambem são importantes para alguns ajustes prévios.
# carregando pacotes
library(rgdal)
library(ggplot2)
library(maptools)
library(plyr)
Em seguida, é necessário obter os arquivos .shp da Aquatic Resource Monitoring. Você pode fazer o download manualmente no link acima, baixando o arquivo ecoregion_design e salvando no mesmo diretório de trabalho da sua seção, ou executar o código abaixo.
# registrando o link
arm_eco <- "https://archive.epa.gov/nheerl/arm/web/zip/ecoregion_design.zip"
# baixando o arquivo
tf <- tempfile()
download.file(arm_eco,tf,mode = "w",method = "auto")
# descompactando o arquivo
dir.create("ecorregion_design")
unzip(tf,exdir = "ecorregion_design")
Após executar o código anterior, cria-se um diretório “ecorregion_design”. A informação principal está armazenada nos arquivos com nome padrão eco_l3_ut.
Para carregar os polígonos no R, usamos “rgdal::readOgr”. A leitura retorna um objeto da classe sp::SpatialPolygonsDataFrame. Os argumentos principais sao dsn, o endereço do diretório onde estão os arquivos .shp, .dbf, etc; e o argumento layer, onde inserimos o nome do arquivo .shp, (sem a terminação “.shp”).
eco.sp <- readOGR(dsn = "ecorregion_design",layer = "eco_l3_ut")
class(eco.sp)
## [1] "SpatialPolygonsDataFrame"
## attr(,"package")
## [1] "sp"
Uma primeira visualização do arquivo pode ser feito com um plot simples. Costumo usar esse recurso para checar se o arquivo está completo, com todas as regiões que deveriam estar no mapa.
plot(eco.sp)
Os objetos da classe SpatialPolygonsDataFrame são formados por partes chamadas de slots, sendo que os principais são:
Os nomes dos slots de um objeto dessa classe podem ser acessados via
slotNames(eco.sp)
Entretanto, é necessário fazer alguns ajustes nesse objeto. Primeiro, é necessário declarar um id dos polígonos no slot $@data$.
eco.sp@data$id = rownames(eco.sp@data)
Outro ajuste é necessário pelo fato de que o pacote ggplot2 é otimizado para data.frame. É necessário realizar esta conversão sem no entanto perder a localização geográfica do polígono que está sendo utilizado. A função ggplot2::fortify realiza essa tarefa e transforma um SpatialPolygonsDataFrame em arquivo de pontos.
eco.points <- fortify(eco.sp,region = "id")
Por último, juntaremos os atributos do slot data anterior no novo objeto eco.points.
eco.df <- join(eco.points,eco.sp@data,by = "id")
Finalmente, o codigo abaixo cria um mapa tematico a partir de um shapefile original com geometria em poligonos.
ggplot(eco.df) +
aes(long,lat,group=group,fill=LEVEL3_NAM) +
geom_polygon() +
geom_path(color="white") +
coord_equal() +
scale_fill_brewer("Utah Ecoregion")