我想知道如何基于Leaflet for R中的addLayerControl()来隐藏/切换图例?当切换选项层a时,addPolygons()不显示选项层b的数据,因为我可以使用GROUP。但是,addLegend()选项没有GROUP功能,因此当我选择组图层a(红色)时,我无法隐藏组图层b(蓝色)的图例:
你知道怎么做吗?
此致
里斯
答案 0 :(得分:2)
此代码对我有用:
observeEvent(input$mymap_groups,{
mymap <- leafletProxy("mymap", data = SalesMap)
mymap %>% clearControls()
if (input$mymap_groups == '1') {
mymap %>% addLegend(position="bottomright", pal=pal1, values=SalesMap$SALES, title="a")
}
else if (input$mymap_groups == '2') {
mymap %>% addLegend(position="bottomright", pal=pal2, values=SalesMap$Bonnen, title="b")
}
})
您可以使用输入$ mymap_groups来识别选择的组类型。在observeEvent()中,您可以使用if / else语句基于组创建图例。
答案 1 :(得分:2)
如果将来有人在考虑这个问题,那么有一种新的可行方法。
如果您正在使用leaflet
包的开发/ Github版本,addLegend()
现在支持group
和layerId
参数。
(运行命令devtools::install_github('rstudio/leaflet')
进行安装)
即使最新的CRAN版本(1.1.0)也支持layerID
。
假设您使用开发版本,以下代码应该可以使用:
leaflet() %>%
#Polygon Layers
addPolygons(data = exampleDataOne, group = "Group A") %>%
addPolygons(data = exampleDataTwo, group = "Group B") %>%
#Legend Layers
addLegend(values = exampleValuesOne, group = "Group A",
position = "bottomright") %>%
addLegend(values = exampleValuesTwo, group = "Group B",
position = "bottomright") %>%
#Layers Control
addLayersControl(overlayGroups = c("Group A","Group B"),
options = layersControlOptions(collapsed = FALSE))
这应具有仅在相应图层处于活动状态时显示图例的预期效果。
一个潜在的问题是,默认情况下,所有leaflet
图层都处于活动状态。如果您有重叠的多边形,这可能会导致视觉上不那么吸引人的地图。而且,如果你有多个传说,这也是一个问题。
您可以使用hideGroup()
功能。
如果您希望上述示例中的Group A
仅在启动时处于活动状态,则可以添加
%>% hideGroup("Group B")
到上面代码块的末尾。