使用ggmap在R中基于地图的点和密度图

我已经提供了有关如何使用R中的deckgl和Leaflet创建热图(即密度图)的示例。在本文中,我想提供一个示例,说明如何使用R中的ggmap包可视化数据集的空间属性。加载我要用于分析的软件包。

#devtools::install_github("dkahle/ggmap", ref = "tidyup") 
#由于当前ggmap不在CRAN上
library(ggmap)
library(ggplot2)
library(dplyr)
library(gridExtra)

在此编码示例中,我将使用R中可用的默认数据库进行演示。因此,我通过显示其顶部条目来瞥见该数据集。

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

您将注意到:数据集已经包含所有数据条目的经度和纬度坐标。这是我们数据集的空间属性。

接下来,我提供一个示例,说明如何从ggmap包中“拖动”底图磁贴。在下面的代码片段中,我为美国建立了底图图块。

#绘制ggmap底图
us <- c(left = -125, bottom = 25.75, right = -67, top = 49)
map <- get_stamenmap(us, zoom = 5, maptype = "toner-lite",legend="none")
plot(map)

然后,“ get_stamenmap”函数来自ggmap包。

现在,我们准备根据数据集的空间属性创建第一个图。下面,我根据提供的“犯罪”数据集的坐标,显示了谋杀犯罪现场的分布。 “ qmplot”功能来自ggmap软件包。

scatterplot_murder <- qmplot(x=lon,y=lat,data=filter(crime,offense=="murder"),legend="none",color=I("darkred"))
plot(scatterplot_murder)

接下来,我将绘制一个热图(即密度图)。为此,我需要在“ qmplot”函数中将“ geom”参数指定为“ polygon”。另外,我需要使用“ stat_density_2d”和“ scale_fill_gradient2”功能。密度估计基于2D内核密度估计。它由“ stat_density_2d”函数计算。

#使用ggmap包创建其他类型的图
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)

在此示例中,可视化还不是完美的,可以进一步改进。做到这一点的方法例如是通过调整密度估算计算。

确保查看我关于R中空间数据可视化的其他文章。

You May Also Like

Leave a Reply

Leave a Reply

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据