Nessa pub vai explicar como criei alguns mapas quando estava estudando Economia Regional, existem algumas falhas nos códigos (não porque não está rodando, mas porque não simplifiquei ou não deixei fácil acesso). No Google está cheio de pub’s explicando como fazer um mapinha no R, e no início fui pegando os códigos da internet, compilando, e fui fazendo alguns ajustes para melhorar a visualização, e ficou bom!! Melhor que outras pub’s.
Primeiro, necessita baixar os pacotes. O pacote geobr tem as rotinas para o download dos mapas com divisões territoriais variadas. O ggplot2 para fazer os gráficos. O dplyr vai realizar transformações de dados. O readrpara ler os dados do Excel. O RgoogleMapsserá útil para as informações de latitude e longitude das cidades. E por fim o RcolorBrewer para adicionar cores a mais no plot.
library(geobr)
## Loading required namespace: sf
library(ggplot2)
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(readr)
library(RgoogleMaps)
library(RColorBrewer)
A seguir, importo o arquivo capita.csv que contém a Renda per capita dos 77 municípios do Mato Grosso do Sul (código 50), ano 2018, e o resto do trabalho deixo para o geobr, e não sei como explicar, mas fiz tipo um cruzamento de uma tabela feita pelo geobr e a minha do Excel.
Encodingdefine a marca de codificação sem traduzir a sequência de caracteres. Todas as plataformas R suportam (para a codificação da localidade atual) latin1e UTF-8.
capita = read_csv2('capita.csv', locale=locale(encoding='Latin1'))
## i Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
##
## -- Column specification --------------------------------------------------------
## cols(
## name_muni = col_character(),
## capita = col_number()
## )
mun_ms <- read_municipality(code_muni=50, year=2018)
## Using year 2018
##
Downloading: 780 B
Downloading: 780 B
Downloading: 12 kB
Downloading: 12 kB
Downloading: 28 kB
Downloading: 28 kB
Downloading: 44 kB
Downloading: 44 kB
Downloading: 60 kB
Downloading: 60 kB
Downloading: 60 kB
Downloading: 60 kB
Downloading: 60 kB
Downloading: 60 kB
Downloading: 76 kB
Downloading: 76 kB
Downloading: 84 kB
Downloading: 84 kB
Downloading: 93 kB
Downloading: 93 kB
Downloading: 93 kB
Downloading: 93 kB
Downloading: 110 kB
Downloading: 110 kB
Downloading: 120 kB
Downloading: 120 kB
Downloading: 140 kB
Downloading: 140 kB
Downloading: 150 kB
Downloading: 150 kB
Downloading: 170 kB
Downloading: 170 kB
Downloading: 170 kB
Downloading: 170 kB
Downloading: 170 kB
Downloading: 170 kB
Downloading: 170 kB
Downloading: 170 kB
Downloading: 170 kB
Downloading: 170 kB
Downloading: 170 kB
Downloading: 170 kB
Downloading: 190 kB
Downloading: 190 kB
Downloading: 210 kB
Downloading: 210 kB
Downloading: 210 kB
Downloading: 210 kB
Downloading: 230 kB
Downloading: 230 kB
Downloading: 250 kB
Downloading: 250 kB
Downloading: 260 kB
Downloading: 260 kB
Downloading: 280 kB
Downloading: 280 kB
Downloading: 290 kB
Downloading: 290 kB
Downloading: 310 kB
Downloading: 310 kB
Downloading: 330 kB
Downloading: 330 kB
Downloading: 340 kB
Downloading: 340 kB
Downloading: 360 kB
Downloading: 360 kB
Downloading: 380 kB
Downloading: 380 kB
Downloading: 390 kB
Downloading: 390 kB
Downloading: 410 kB
Downloading: 410 kB
Downloading: 420 kB
Downloading: 420 kB
Downloading: 440 kB
Downloading: 440 kB
Downloading: 460 kB
Downloading: 460 kB
Downloading: 460 kB
Downloading: 460 kB
Downloading: 460 kB
Downloading: 460 kB
Downloading: 480 kB
Downloading: 480 kB
Downloading: 500 kB
Downloading: 500 kB
Downloading: 510 kB
Downloading: 510 kB
Downloading: 530 kB
Downloading: 530 kB
Downloading: 540 kB
Downloading: 540 kB
Downloading: 550 kB
Downloading: 550 kB
Downloading: 550 kB
Downloading: 550 kB
Downloading: 550 kB
Downloading: 550 kB
all_mun_ms <- full_join(mun_ms, capita, by='name_muni')
capita
mun_ms
all_mun_ms
Aqui é o que deu mais trabalho, como meu trabalho era de uma MicroRegião específica, eu queria colocar pontos para mostrar a localização, e o pacote do Google Maps me ajudou a encontrar os dados. O complicado foi fazer o resto para tentar organizar os pontinhos, e o data frame junto com os dados do Google Maps. Não sei explicar direito como que fiz isso, mas segui o manual do pacote.
cidades <- c("Amambai MS", "Sete Quedas MS", "Tacuru MS", "Coronel Sapucaia MS", "Paranhos MS")
DF <- data.frame(cidade=cidades, lat=NA, lon=NA)
DF <- with(DF,data.frame(cidade=cidade, t(sapply(DF$cidade, getGeoCode))))
DF
Aqui é mamão com açucar comparado aos trabalhos anteriores. O mapa pode fazer em cores gradientes, mas não fiz, quis especificar as cores, entretanto, meu professor de Regional (Adriano Figueiredo) tem no pub dele explicando como fazer um mapa, mas com cores gradientes. Mas a legenda acaba não ajudando muito, pois é dificil de associar uma cor da legenda com a cor do gráfico.
Então para facilitar a visualização, categorizei a variável que queremos observar em um conjunto pequeno de categorias no nosso mapa usando a função cut(). A mas, e esse cataí, foi apenas gravar no disco para sf que contém uma coleção de recursos incluindo atributos e geometrias que contemplam os aspectos espaciais para desenhar o mapa.
all_mun_ms$cat <- cut(all_mun_ms$capita, breaks = c(0, 20000, 30000, 50000, Inf),
labels=c("até 20.000","20.000-30.000","30.000-50.000","+50.000"))
No pacote RColorBrewer vai ter infinitas maneiras de você fazer suas próprias cores, até na forma gradiente, ou duas cores, ou aleatórias, no meu caso, fiz no manual mesmo.
E o geom_point são para plotar os pontos, e coloquei na cor azul, conforme a latitude e longitude obtidas.
O código theme vai servir para tirar o fundo, colocar a cor das linhas e etc.
ggplot(all_mun_ms) +
geom_sf(aes(fill=cat))+
scale_fill_manual(values=c('#FA8072', '#FFE4C4', '#BCF5A9', '#31B404'), name="PIB per Capita")+
labs(caption='Economia Regional UFMS') +
geom_point(data=DF, x=DF$lon, y=DF$lat, color="blue")+
theme(panel.grid = element_line(colour = "transparent"),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank())
O resto deixo com vocês para brincarem e melhorar meu gráfico, um dia atualizo e também vou melhorando. Mas quiserem trocar algumas ideias comigo me segue no Twitter: @MacenaYukio.