【问题标题】:Combining Kernel density (kde2d) with base map将核密度 (kde2d) 与底图相结合
【发布时间】:2017-01-27 14:02:02
【问题描述】:

我是 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))

现在我想在图片后面放一个谷歌底图,但不知道怎么做,我试过了:

require(ggmap)
    mapImageData1 = get_map(location = c(lon = -16.664, lat = 52.859),
                            color = "color",
                            source = "google",
                            maptype = "satellite",
                            zoom = 16)

    ggmap(mapImageData1)

但是我现在如何将地图与具有匹配坐标的图像结合起来?或者尽管 kde2d 有另一种方法可以使用底图上的坐标进行密度估计?

非常感谢!!!希望有人可以在这里帮助我。

【问题讨论】:

    标签: r image ggmap


    【解决方案1】:
    library(MASS)
    f1 <- kde2d(spe$Lat, spe$Long, n = 500,h=0.0005)
    

    您可以使用

    将内核密度转换为 RasterLayer
    r1 <- raster(f1)
    

    您可以删除非常低的密度值

    r1[r1 < 0.0001 ] <- NA
    

    然后将其添加到ggmap 底图,例如I showed in another question

    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])
    

    拉伸结果可能是由您提供的数据样本引起的。

    【讨论】:

    • 谢谢!这很棒,但是我的地图上有一个白框,其中内核计算中没有密度。你知道一种方法可以使它变得透明,因为这不是很漂亮吗?或者@lmo 的热图想法可能是另一种选择?我该如何实现呢?非常感谢
    • 我对其进行了编辑,因此非常低的值为NA,即透明
    • 最后一个补充:知道改变颜色的方法,而不是像你在其他问题中所做的那样将所有东西都转换成多边形吗?因为这需要几天的时间,并且会使数据变得嘈杂..
    • 我得到的最接近的是that。不幸的是,它对我不起作用。 rasterVis 包中的 gplot() 函数可能有助于着色。但是,我确实无法从ggmap 添加底图。如果您让它运行,请将其编辑为此答案。我也会很感兴趣的。
    • 我找到了这个指导:但无法用我的数据有用地重现它,但也许它对你的情况有帮助! rpubs.com/alobo/rasterOnGM
    【解决方案2】:

    如果您想要交互式 Google 地图(而不是静态地图),您可以尝试我的 googleway 包的开发版本,并使用 Google Maps API 绘制heatlayer

    要使用 Google Maps 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()
    

    注意:我已经缩小了一点,以便您可以看到左侧的土地,并且“热量”指向右侧。

    【讨论】:

    • 感谢您的选择!尽管它显示的是热图而不是内核密度结果。但是有一个问题:我在 googleway 包中找不到函数:google_map 或函数 add_heatmap。编辑:我在 github 上找到的 google_map 但不是 add_heatmap。你能帮帮我吗?
    • @JmO 两个函数都在开发版本中;我已经编辑了我的帖子以包含安装它的代码。
    • @JmO - 如果您可以将图层保存为 KML,那么还有 add_kml() 函数
    • 非常感谢,我会试试的!
    • @JmO - 会对你如何处理它感兴趣;几天前我才添加了这个功能,所以很想听到任何反馈
    猜你喜欢
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 2012-07-17
    • 2021-09-11
    • 2014-09-21
    • 2014-05-10
    • 2012-07-15
    相关资源
    最近更新 更多