首页 > 解决方案 > R Leaflet:将多个组分配给一个图层

问题描述

我正在尝试绘制包含多列分类变量的传单图。我为每个组分配一个复选框。但是复选框不能正常工作。“A b”组包括三个点,但当“A b”复选框未选中时,只需删除1个点即可。为什么?

library(dplyr)
library(leaflet)
groups_all<-paste(
rep(LETTERS[1:2],each=3),
rep(letters[1:3],len=6),sep="     "
)

groups_all<-paste(
rep(LETTERS[1:2],each=3),
rep(letters[1:3],len=6)
)


data <- data.frame(Name1 = c("A", "A", "A", "B", "B", "B", "A", "B"),
        Name2 = c("a", "b", "b", "a", "b", "a", "b", "c"),
               Value1 = c(12,43,54,34,23,77,44,22),
               Value2 = c(6,5,2,7,5,6,4,3),
               Lat = c(51.1, 51.6, 57.3, 52.4, 56.3, 54.3, 60.4, 49.2),
               Lon = c(5, -3, -2, -1, 4, 3, -5, 0))


> data 
    Name1 Name2 Value1 Value2  Lat Lon
1     A     a     12      6 51.1   5
2     A     b     43      5 51.6  -3
3     A     b     54      2 57.3  -2
4     B     a     34      7 52.4  -1
5     B     b     23      5 56.3   4    
6     B     a     77      6 54.3   3
7     A     b     44      4 60.4  -5
8     B     c     22      3 49.2   0

data %>%
leaflet() %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addAwesomeMarkers(
lng = ~Lon ,
lat = ~Lat ,
#icon = ~logos[Name1 ,Name2],
group = c(~cbind(Name1 ,Name2) ,groups_all)
            
)%>% 
addLayersControl(
#baseGroups = c(""),
overlayGroups = groups_all,
options = layersControlOptions(collapsed = FALSE)
)

标签: rleaflet

解决方案


不知道你想用cbind. 相反,您可以简单地使用pasteName1和创建您的组名Name2

作为一个例子,我hideGroup("A b")在输出上使用了它,它根据需要过滤掉所有三个点:

library(dplyr)
library(leaflet)

groups_all<-paste(
  rep(LETTERS[1:2],each=3),
  rep(letters[1:3],len=6)
)


data <- data.frame(Name1 = c("A", "A", "A", "B", "B", "B", "A", "B"),
                   Name2 = c("a", "b", "b", "a", "b", "a", "b", "c"),
                   Value1 = c(12,43,54,34,23,77,44,22),
                   Value2 = c(6,5,2,7,5,6,4,3),
                   Lat = c(51.1, 51.6, 57.3, 52.4, 56.3, 54.3, 60.4, 49.2),
                   Lon = c(5, -3, -2, -1, 4, 3, -5, 0))

foo <- data %>%
  leaflet() %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addAwesomeMarkers(
    lng = ~Lon ,
    lat = ~Lat ,
    group = ~paste(Name1 ,Name2)
    
  )%>% 
  addLayersControl(
    overlayGroups = groups_all,
    options = layersControlOptions(collapsed = FALSE)
  )

foo %>% 
  hideGroup("A b")


推荐阅读