向R传单热图添加“ rgb”图例

问题描述 投票:5回答:1

我使用leaflet(特别是leaflet.extras包中的addHeatmap()命令)和shiny制作了一些交互式热图。创建所需的地图后,我想在其中添加图例。

我感兴趣的是一个“ rgb”图例,它基于由addHeatmap()从纯长/纬度坐标推导出的密度值。我需要的是这张地图-https://www.patrick-wied.at/static/heatmapjs/example-legend-tooltip.html-不幸的是,我不了解JS,无法用R来重写此代码,也不能为我的问题添加正确的JS代码片段。

到目前为止,我尝试的是addLegend()命令,该命令无法提供所需的结果,因为在这种情况下,我需要指定一个变量,以为其准备图例。我还尝试从创建的传单对象中提取颜色范围和分配的值,但是没有成功。

这里有完整数据的链接,可在以下位置运行可复制的示例:https://drive.google.com/file/d/1h3jL_PU6DGTtdIWBK02Tt37R7IB2ArH9/view

这是前20条记录:

structure(list(latitude = c(30.309522, 30.24429616, 30.30038194, 
                            30.27752338, 30.23294081, 30.23038507, 
                            30.34285933, 30.24962237, 30.26594744, 
                            30.20515821, 30.22363485, 30.2759184, 
                            30.28283226, 30.33816909, 30.26611565, 
                            30.18835401, 30.26704789, 30.27456699, 
                            30.19237135, 30.1925213), 
              longitude = c(-97.73171047, -97.77446858, -97.77885789, 
                            -97.71919076, -97.58937812, -97.76581095, 
                            -97.73598704, -97.72215443, -97.74144275, 
                            -97.8782895, -97.78329845, -97.71321066, 
                            -97.70820152, -97.82413058, -97.7327258, 
                            -97.81606795, -97.68989589, -97.7580592, 
                            -97.7816127, -97.73138523)), 
                .Names =  c("latitude", "longitude"), row.names = 
                                c(NA, 20L), class = "data.frame")      

这是示例代码,我想通过提到的功能对其进行扩展:

library(magrittr)
library(leaflet)
library(leaflet.extras)

data <- read.csv('DATA.csv')
leaflet(data) %>%
  addTiles(group="OSM") %>%
  addHeatmap(group="heat", lng = ~longitude, lat = ~latitude, max=.5, blur = 60)

这是该代码的结果(在整个数据集上:

https://i.stack.imgur.com/6VFNC.jpg

所以总结一下我想做的事情:基于这样的图片,我想提取绘制颜色的范围以及分配给它们的值,并使用该信息绘制图例。

我缺少什么吗?看来这是一个非常简单的问题,但过去几个小时来,我一直在努力寻找解决方案。预先感谢您的帮助!

EDIT:扩展了可重现的示例。

r leaflet data-visualization heatmap
1个回答
0
投票

您的样本数据没有任何值可以实际映射密度叠加层。

您可以用colorBin()指定纸槽的数量,然后用pal功能指定那些纸槽。您可以根据需要在data_values分布中不同地设置垃圾箱。 colorBin()的帮助部分可帮助您确定所需的正确参数。

bins <- c(0,1,2,3,4)
pal <- colorBin("Spectral", domain = data_value, bins = bins, na.color = "transparent")

m <-leaflet() %>% 
      addTiles() %>% 
      addHeatmap(lng= long_cords, lat = lat_cords, intensity = data_value,
                 blur = 20, max = 400, radius = 15, cellSize = 3) %>%     
      addLegend(pal = pal, values = data_value,
                title="Heat map legend")

您必须使用addHeatmap参数来获得正确的透明度和浓度设置。

© www.soinside.com 2019 - 2024. All rights reserved.