将内核密度 (kde2d) 与底图相结合
Combining Kernel density (kde2d) with base map
我是 R 新手,对将核密度图像图与底图相结合有疑问:
示例数据集的子集:
spe <- read.table(text = 'Lat Long
-16.664969 52.85978
-16.663191 52.94521
-16.664250 52.85902
-16.664250 52.85902
-16.665164 52.87561
-16.664374 52.98654
-16.663627 53.12452
-16.663479 52.85833
-16.663479 52.85833
-16.663032 52.85823
-16.664142 52.85848
-16.663351 52.85834
-16.663196 52.85829
-16.663339 52.85803
-16.665213 52.85939
-16.664166 52.85912
-16.664166 52.85912
-16.663654 52.85868
-16.663660 52.85868
-16.661111 52.86002', sep = " ", header = T)
为此我做了核密度估计和图像:
library(MASS)
f1 <- kde2d(spe$Lat, spe$Long, n = 500,h=0.0005)
image(f1,col= colorRampPalette(c("white", "red"))(15))
现在我想在图像后面放置一个 google 底图,但不知道该怎么做,我试过:
require(ggmap)
mapImageData1 = get_map(location = c(lon = -16.664, lat = 52.859),
color = "color",
source = "google",
maptype = "satellite",
zoom = 16)
ggmap(mapImageData1)
但是现在如何将地图与具有匹配坐标的图像结合起来?或者尽管 kde2d 有另一种方法可以使用底图上的坐标进行密度估计?
非常感谢!!!希望有人能在这里帮助我。
library(MASS)
f1 <- kde2d(spe$Lat, spe$Long, n = 500,h=0.0005)
您可以将内核密度转换为 RasterLayer
和
r1 <- raster(f1)
您可以使用
删除非常低的密度值
r1[r1 < 0.0001 ] <- NA
然后将其添加到 ggmap
底图,如 :
bm <- ggmap(get_map(location = c(lon = -16.664, lat = 52.859),
maptype = "terrain", zoom = 16))
bm + inset_raster(as.raster(r1), xmin = r1@extent[1], xmax = r1@extent[2],
ymin = r1@extent[3], ymax = r1@extent[4])
拉伸结果可能是由您提供的数据样本引起的。
如果你想要一个交互式 Google 地图(而不是静态地图),你可以尝试我的 googleway
包的开发版本,并使用 Google 地图 API 绘制 heatlayer
要使用 Google 地图 API 你需要 api key
## install development version
# devtools::install_github("SymbolixAU/googleway")
library(googleway)
library(magrittr) ## pour les pipes
map_key <- "your_api_key"
google_map(key = map_key, data = spe) %>%
add_heatmap()
注意:我缩小了一点,所以您可以看到左边的土地,'heat' 指向右边。
我是 R 新手,对将核密度图像图与底图相结合有疑问: 示例数据集的子集:
spe <- read.table(text = 'Lat Long
-16.664969 52.85978
-16.663191 52.94521
-16.664250 52.85902
-16.664250 52.85902
-16.665164 52.87561
-16.664374 52.98654
-16.663627 53.12452
-16.663479 52.85833
-16.663479 52.85833
-16.663032 52.85823
-16.664142 52.85848
-16.663351 52.85834
-16.663196 52.85829
-16.663339 52.85803
-16.665213 52.85939
-16.664166 52.85912
-16.664166 52.85912
-16.663654 52.85868
-16.663660 52.85868
-16.661111 52.86002', sep = " ", header = T)
为此我做了核密度估计和图像:
library(MASS)
f1 <- kde2d(spe$Lat, spe$Long, n = 500,h=0.0005)
image(f1,col= colorRampPalette(c("white", "red"))(15))
现在我想在图像后面放置一个 google 底图,但不知道该怎么做,我试过:
require(ggmap)
mapImageData1 = get_map(location = c(lon = -16.664, lat = 52.859),
color = "color",
source = "google",
maptype = "satellite",
zoom = 16)
ggmap(mapImageData1)
但是现在如何将地图与具有匹配坐标的图像结合起来?或者尽管 kde2d 有另一种方法可以使用底图上的坐标进行密度估计?
非常感谢!!!希望有人能在这里帮助我。
library(MASS)
f1 <- kde2d(spe$Lat, spe$Long, n = 500,h=0.0005)
您可以将内核密度转换为 RasterLayer
和
r1 <- raster(f1)
您可以使用
删除非常低的密度值r1[r1 < 0.0001 ] <- NA
然后将其添加到 ggmap
底图,如
bm <- ggmap(get_map(location = c(lon = -16.664, lat = 52.859),
maptype = "terrain", zoom = 16))
bm + inset_raster(as.raster(r1), xmin = r1@extent[1], xmax = r1@extent[2],
ymin = r1@extent[3], ymax = r1@extent[4])
拉伸结果可能是由您提供的数据样本引起的。
如果你想要一个交互式 Google 地图(而不是静态地图),你可以尝试我的 googleway
包的开发版本,并使用 Google 地图 API 绘制 heatlayer
要使用 Google 地图 API 你需要 api key
## install development version
# devtools::install_github("SymbolixAU/googleway")
library(googleway)
library(magrittr) ## pour les pipes
map_key <- "your_api_key"
google_map(key = map_key, data = spe) %>%
add_heatmap()
注意:我缩小了一点,所以您可以看到左边的土地,'heat' 指向右边。