ggmap para plotagens baseadas em mapa

Este artigo aborda o ggmap em R. Mostrarei como você pode criar gráficos de dispersão e gráficos de densidade baseados em mapa usando ggmap em R. Em outros artigos deste blog, já forneci exemplos de como criar mapas de calor em R. Para isso, por exemplo gráficos de densidade criados com deckgl e Leaflet .

Como uso frequentemente o gganimate para criar animações em R, e o gganimate é compatível com o ggmap , também quero abordar o ggmap no R. É isso que faço neste artigo.

Configurando dados e pacotes para demonstrar o ggmap em R

Primeiro carrego os pacotes que preciso para minha análise. Você pode ver isso nas linhas de código abaixo.

#devtools::install_github("dkahle/ggmap", ref = "tidyup") # since currently ggmap is not on CRAN
library(ggmap)
library(ggplot2)
library(dplyr)
library(gridExtra)

Usarei um conjunto de dados padrão disponível em R para fins de demonstração neste exemplo de codificação. O conjunto de dados que usarei é um conjunto de dados chamado “crime”. Ele contém dados de crimes espaciais. Forneço um vislumbre do cabeçalho do conjunto de dados abaixo.

head(crime)
##                      time     date hour premise            offense  beat
## 82729 2010-01-01 07:00:00 1/1/2010    0     18A             murder 15E30
## 82730 2010-01-01 07:00:00 1/1/2010    0     13R            robbery 13D10
## 82731 2010-01-01 07:00:00 1/1/2010    0     20R aggravated assault 16E20
## 82732 2010-01-01 07:00:00 1/1/2010    0     20R aggravated assault  2A30
## 82733 2010-01-01 07:00:00 1/1/2010    0     20A aggravated assault 14D20
## 82734 2010-01-01 07:00:00 1/1/2010    0     20R           burglary 18F60
##           block    street type suffix number   month    day
## 82729 9600-9699   marlive   ln      -      1 january friday
## 82730 4700-4799 telephone   rd      -      1 january friday
## 82731 5000-5099  wickview   ln      -      1 january friday
## 82732 1000-1099   ashland   st      -      1 january friday
## 82733 8300-8399    canyon           -      1 january friday
## 82734 9300-9399     rowan   ln      -      1 january friday
##                       location           address       lon      lat
## 82729    apartment parking lot   9650 marlive ln -95.43739 29.67790
## 82730 road / street / sidewalk 4750 telephone rd -95.29888 29.69171
## 82731        residence / house  5050 wickview ln -95.45586 29.59922
## 82732        residence / house   1050 ashland st -95.40334 29.79024
## 82733                apartment       8350 canyon -95.37791 29.67063
## 82734        residence / house     9350 rowan ln -95.54830 29.70223

Você notará: O conjunto de dados já contém coordenadas de longitude e latitude para todas as entradas de dados. Esta é a propriedade espacial do nosso conjunto de dados.

Acessando mapas e visualizando-os usando ggmap em R

Em seguida, forneço um exemplo de como os blocos de mapa base podem ser “puxados” do pacote ggmap. No código abaixo, recortei os blocos de mapa base para os EUA.

# plot a ggmap basemap
us <- c(left = -125, bottom = 25.75, right = -67, top = 49)
map <- get_stamenmap(us, zoom = 5, maptype = "toner-lite",legend="none")
plot(map)
mapa vazio antes de adicionar gráficos de densidade baseados em mapa em R

Então a função “get_stamenmap” é do pacote ggmap.

Criando um primeiro gráfico de dispersão baseado em mapa

Agora estamos prontos para criar um primeiro gráfico, com base nas propriedades espaciais do nosso conjunto de dados. Abaixo, mostro a distribuição das cenas de crimes de assassinato, com base nas coordenadas fornecidas no conjunto de dados “crime”. A função “qmplot” é do pacote ggmap.

scatterplot_murder <- qmplot(x=lon,y=lat,data=filter(crime,offense=="murder"),legend="none",color=I("darkred"))
plot(scatterplot_murder)
Gráfico de densidade baseado em mapa com ggmap em R

Eu gosto de gráficos de dispersão para mostrar locais exatos. Dependendo da questão ou problema em questão, este pode ser o caminho certo para visualizar dados espaciais. Às vezes, entretanto, algum tipo de distribuição de probabilidade ao longo das dimensões espaciais é mais útil. Para isso vou agora criar um mapa de calor usando o ggmap no R.

Desenhar mapas de calor para visualizar a densidade espacial

Vou desenhar um mapa de calor (ou seja, um gráfico de densidade). Para isso, precisarei especificar o parâmetro “geom” na função “qmplot” para “polígono”. Além disso, preciso usar a função “stat_density_2d” e “scale_fill_gradient2”. A estimativa de densidade é baseada na estimativa de densidade de kernel 2D. É calculado pela função “stat_density_2d”.

# create other types of plots with the ggmap package
densityplot_murder <- qmplot(x=lon, y=lat, 
                             data = filter(crime,offense=="murder"), 
                             geom = "blank",
                             maptype = "toner-background", 
                             darken = .7, 
                             legend = "topright") + stat_density_2d(aes(fill = ..level..), 
                  geom = "polygon", 
                  alpha = .5,
                  color = NA) + scale_fill_gradient2(low = "blue", 
                       mid = "green", 
                       high = "red")
plot(densityplot_murder)
Gráficos de densidade baseados em mapa em R com ggmap

Neste exemplo, a visualização ainda não é perfeita e pode ser melhorada ainda mais. As formas de fazer isso seriam, por exemplo, ajustando o cálculo da estimativa de densidade.

Referências a outro conteúdo relacionado à visualização de dados espaciais

Eu listo alguns outros artigos relevantes abaixo. Alguns deles são publicados neste blog, enquanto outros são originários de fontes externas:

You May Also Like

Leave a Reply

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.