使用 R 为 Leaflet 中的图层控制框添加标题

Mok*_*ire 8 r leaflet

我希望沿着“可用图层”的线条向图层控制框添加标题。

我的搜索使我只找到了一个相关结果:

我的代码:

map %>% leaflet() %>%
  addProviderTiles(provider = "CartoDB") %>%
  # Group 1 Polygons
  addPolygons(data = map[!is.na(map$var),] ,weight =1, 
              color = ~g1_pal(g1), fillOpacity = .6,
              group = "Group 1",
              # add labels
              label = ~labels,
              # highlight polygons on hover
              highlight = highlightOptions(weight = 5, color = "white",
                                           bringToFront = TRUE)) %>%
  # Group 2
  addPolygons(data = map[!is.na(map$var2),], weight =1, 
              color = ~g2_pal(g2), fillOpacity = .6,
              group = "Group 2",
              # add labels that display mean income
              label = ~labels2,
              # highlight polygons on hover
              highlight = highlightOptions(weight = 5, color = "white",
                                           bringToFront = TRUE)) %>%
  addLayersControl(baseGroups = c("Group 1", "Group 2"), 
                   options = layersControlOptions(collapsed=F, 
                                                  # Series of attempts 
                                                  label = "Layers",
                                                  title = "Layers"))
Run Code Online (Sandbox Code Playgroud)

这些尝试都没有奏效。从上面的链接中确实可以看到有一个可以访问的属性,但我不确定如何引用它。

hed*_*ds1 7

执行此操作的最佳方法(我知道)是htmlwidgets::onRender在渲染时将您的 Javascript 添加到地图中。这在文档最后一页底部最后一节中进行了描述,因此很容易错过!

这是一个实现 Saurabh Yadav 在他对您链接问题的回答中描述的 Javascript 的示例。您只需将 Javascript 函数添加到leaflet()管道调用的末尾:

library(leaflet)

leaflet() %>%
    addTiles() %>%
    addLayersControl(
        overlayGroups = "MyImaginaryLine",
        options = layersControlOptions(collapsed = FALSE)) %>%
    htmlwidgets::onRender("
        function() {
            $('.leaflet-control-layers-overlays').prepend('<label style=\"text-align:center\">My Epic Title</label>');
        }
    ")
Run Code Online (Sandbox Code Playgroud)

输出

  • 对于 baseGroups,您需要 `.leaflet-control-layers-list` 而不是 `.leaflet-control-layers-overlays` (3认同)