如何在与国家 R 传单相对应的地图多边形上分配弹出窗口
How to assign popup on map polygon that corresponds with the country R leaflet
我正在尝试编写一个脚本,允许人们单击一个国家,然后会出现一个弹出窗口并显示该国家的名称和相应的值。我已经成功创建了每个国家/地区的地图和边界,但是当您单击俄罗斯时,弹出窗口将显示印度。以下是脚本的简化版本:
library(leaflet)
library(maps)
countries <- c("Australia", "South Africa", "India", "Mexico", "USA", "Russia")
values <- c(1,2,3,4,5,6)
bounds <- map("world", countries, fill = TRUE, plot = FALSE)
map <- leaflet(data) %>%
addTiles() %>%
addPolygons(data = bounds, group = "Countries",
color = "red",
weight = 2,
popup = paste("Country: ", countries, "<br>", "Value: ", values, "<br>"),
fillOpacity = 0.1,
highlightOptions = highlightOptions(color = "black",
weight = 2,
bringToFront = TRUE))
map
地图是使用 R 中的 leaflet
包生成的。欢迎任何解决方案或建议,我确信这是我在某处犯的一个简单错误。
我给你留了两个选项。如果您只想显示 bounds
中的国家名称(例如 Australia:Melville Island),您需要将 popup = countries
更改为 popup = ~names
。
map1 <- leaflet() %>%
addProviderTiles("OpenStreetMap.Mapnik") %>%
addPolygons(data = bounds, group = "Countries",
color = "red",
weight = 2,
popup = ~names,
fillOpacity = 0.1,
highlightOptions = highlightOptions(color = "black",
weight = 2,
bringToFront = TRUE))
如果您只想拥有您在 countries
中指定的国家/地区名称,您想要使用 gsub()
来操作 names
,例如。在这里,我删除了每个名称从 :
到末尾的所有字符。
map2 <- leaflet() %>%
addProviderTiles("OpenStreetMap.Mapnik") %>%
addPolygons(data = bounds, group = "Countries",
color = "red",
weight = 2,
popup = ~gsub(x = names, pattern = ":.*$", replacement = ""),
fillOpacity = 0.1,
highlightOptions = highlightOptions(color = "black",
weight = 2,
bringToFront = TRUE))
额外
OP 在他的问题中又添加了一件事。这是我的想法。如果您有两件事要在弹出窗口中显示,您可以执行以下操作。您将 value
添加到 bounds
并创建弹出窗口。
# Add values to bounds.
set.seed(111)
bounds$value <- sample.int(n = 1000, size = 301, replace = TRUE)
map3 <- leaflet() %>%
addProviderTiles("OpenStreetMap.Mapnik") %>%
addPolygons(data = bounds, group = "Countries",
color = "red",
weight = 2,
popup = paste("Country: ", bounds$names, "<br>",
"Value: ", bounds$value, "<br>"),
fillOpacity = 0.1,
highlightOptions = highlightOptions(color = "black",
weight = 2,
bringToFront = TRUE))
我正在尝试编写一个脚本,允许人们单击一个国家,然后会出现一个弹出窗口并显示该国家的名称和相应的值。我已经成功创建了每个国家/地区的地图和边界,但是当您单击俄罗斯时,弹出窗口将显示印度。以下是脚本的简化版本:
library(leaflet)
library(maps)
countries <- c("Australia", "South Africa", "India", "Mexico", "USA", "Russia")
values <- c(1,2,3,4,5,6)
bounds <- map("world", countries, fill = TRUE, plot = FALSE)
map <- leaflet(data) %>%
addTiles() %>%
addPolygons(data = bounds, group = "Countries",
color = "red",
weight = 2,
popup = paste("Country: ", countries, "<br>", "Value: ", values, "<br>"),
fillOpacity = 0.1,
highlightOptions = highlightOptions(color = "black",
weight = 2,
bringToFront = TRUE))
map
地图是使用 R 中的 leaflet
包生成的。欢迎任何解决方案或建议,我确信这是我在某处犯的一个简单错误。
我给你留了两个选项。如果您只想显示 bounds
中的国家名称(例如 Australia:Melville Island),您需要将 popup = countries
更改为 popup = ~names
。
map1 <- leaflet() %>%
addProviderTiles("OpenStreetMap.Mapnik") %>%
addPolygons(data = bounds, group = "Countries",
color = "red",
weight = 2,
popup = ~names,
fillOpacity = 0.1,
highlightOptions = highlightOptions(color = "black",
weight = 2,
bringToFront = TRUE))
如果您只想拥有您在 countries
中指定的国家/地区名称,您想要使用 gsub()
来操作 names
,例如。在这里,我删除了每个名称从 :
到末尾的所有字符。
map2 <- leaflet() %>%
addProviderTiles("OpenStreetMap.Mapnik") %>%
addPolygons(data = bounds, group = "Countries",
color = "red",
weight = 2,
popup = ~gsub(x = names, pattern = ":.*$", replacement = ""),
fillOpacity = 0.1,
highlightOptions = highlightOptions(color = "black",
weight = 2,
bringToFront = TRUE))
额外
OP 在他的问题中又添加了一件事。这是我的想法。如果您有两件事要在弹出窗口中显示,您可以执行以下操作。您将 value
添加到 bounds
并创建弹出窗口。
# Add values to bounds.
set.seed(111)
bounds$value <- sample.int(n = 1000, size = 301, replace = TRUE)
map3 <- leaflet() %>%
addProviderTiles("OpenStreetMap.Mapnik") %>%
addPolygons(data = bounds, group = "Countries",
color = "red",
weight = 2,
popup = paste("Country: ", bounds$names, "<br>",
"Value: ", bounds$value, "<br>"),
fillOpacity = 0.1,
highlightOptions = highlightOptions(color = "black",
weight = 2,
bringToFront = TRUE))