【问题标题】:How to assign popup on map polygon that corresponds with the country R leaflet如何在与国家 R 传单对应的地图多边形上分配弹出窗口
【发布时间】:2018-09-05 19:47:12
【问题描述】:

我正在尝试编写一个脚本,允许人们单击一个国家/地区,然后会出现一个弹出窗口并显示该国家/地区的名称和相应的值。我已经成功创建了每个国家/地区的地图和边界,但是当您单击例如俄罗斯时,弹出窗口将显示印度。以下是脚本的简化版本:

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 包生成的。欢迎提供任何解决方案或建议,我确信这是我在某处犯的一个简单错误。

【问题讨论】:

  • 如果您将popup = countries 替换为popup = ~names,您将看到国家/地区的名称。如果您确实必须显示您在countries 中指定的名称,则需要进行一些字符串操作。
  • 谢谢你的作品。但是,如果我还想附加一些其他信息怎么办?喜欢根据我获得的数据获得的地区信息?
  • 我看不到您想要如何弹出窗口。你想一起展示国家和地区吗?
  • 抱歉,不清楚。如果我点击俄罗斯,它应该会弹出一个显示国家、人口规模、平均气温等的弹出窗口。

标签: r leaflet maps r-leaflet


【解决方案1】:

我给你两个选择。如果您只想显示bounds 中的国家/地区名称(例如,澳大利亚:梅尔维尔岛),则需要将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))

【讨论】:

  • 谢谢,效果很好。但是,例如,如果我有国家列表,并且我还希望在弹出窗口中显示有关我获得的数据的信息,该怎么办。数据
  • @RoelofCoertze 例如,看看this post
  • 请看修改后的版本,你链接的帖子有帮助,但没有解决问题。
  • @RoelofCoertze 我得早点睡觉了,因为这里已经很晚了。您要意识到的一件事是我没有使用矢量countries。我宁愿使用names,它是bounds 的一部分。如果您在bounds 中有value,我认为我在链接中的方法可能会奏效。否则,您需要创建一个包含国家名称(即names)和值的数据框。简而言之,使用countriesvalues 这样的向量并不是正确的方法。
  • 没问题我会试试的。我不是一个训练有素的程序员,只是一个不起眼的生物学家,所以这是相当新的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多