R Leaflet:将多个组分配给一个层
R Leaflet: Assign multiple groups to a layer
我正在尝试绘制一个包含多列分类变量的传单图。我为每个组分配一个复选框。但是复选框不能正常工作。 “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)
)
不确定您要通过 cbind
实现什么。相反,您可以简单地使用 paste
从 Name1
和 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")
我正在尝试绘制一个包含多列分类变量的传单图。我为每个组分配一个复选框。但是复选框不能正常工作。 “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)
)
不确定您要通过 cbind
实现什么。相反,您可以简单地使用 paste
从 Name1
和 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")