将内核密度 (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' 指向右边。