我已经提供了有关如何使用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中空间数据可视化的其他文章。
专业领域为优化和仿真的工业工程师(R,Python,SQL,VBA)
Leave a Reply