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)
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)
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)
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:
- Link: Simulação de Monte Carlo em r para avaliação de risco de localização de armazém
- Link: Pipelines para visualização de dados espaciais em Python e R
- Link: Animação de dados espaciais com ggmap e gganimate em R
- Link: Mapas de calor do folheto em R
- Link: Codificando um aplicativo Leaflet Shiny em R
- Link: Gráficos de densidade de mapa e kernel
Cientista de dados com foco em simulação, otimização e modelagem em R, SQL, VBA e Python
Leave a Reply