【问题标题】:Is there a way to make hyperlinks in the pop-up of a tm_bubbles item?有没有办法在 tm_bubbles 项目的弹出窗口中创建超链接?
【发布时间】:2019-09-06 17:59:02
【问题描述】:

我正在使用 tmap 包来可视化地图中的一些值。 有谁知道在交互式地图的弹出框中集成超链接的方法?

我所做的是使用下面的代码。我确实看到了所需的 URL,但无法单击它。

然后我在字符串中添加了< A HREF="URL">name< / A >。但这并不能使它起作用。

tmap_mode("view")

tm_shape(dataset) +
  tm_bubbles(size = 1, col = "value1", palette = "-RdBu", popup.vars = c("value2","URL"), text = "value3")

如果能帮我发现这是否可行,我将不胜感激。

【问题讨论】:

标签: r tmap


【解决方案1】:

在发布 {tmap}(2021 年 3 月)的 3.3-1 之前,您对 tmap 中的弹出窗口的控制较少。从那以后世界发生了变化,您可能认为此答案已弃用 - 直接使用 {leaflet} 仍然有效,但它不再是使超链接在弹出窗口中有效的唯一方法。

有关纯 {tmap} 工作流程的示例,请参阅我的新答案。

通过包leaflet直接使用leaflet库要容易得多。

我首先将弹出窗口的文本作为 HTML 粘贴在一起,然后在 leaflet::addCircleMarkers() 调用中将其用作弹出参数(波浪号很重要)。

leaflet 中的圆形标记非常像 tmap 气泡,可以调整为看起来比这更精细;为了代码简洁起见,我将重点放在主要主题上,即交互式地图的弹出气球中的可自定义超链接。

library(dplyr)   # for mutate & pipe
library(tmap)    # for the metro dataset
library(leaflet) # interface to leaflet

data("metro") # from the tmap package

metro %>% 
  mutate(label = paste("marvel at ", name, " and follow <a href = https://stackoverflow.com/>stack overflow</a>")) %>% 
  leaflet() %>%
  addTiles(group = "OSM") %>%
  addCircleMarkers(popup = ~label)

【讨论】:

  • 非常感谢您的超快回复。我绝对可以用这个!
  • 关于“据我所知,您几乎无法控制 tmap 中的弹出窗口” - 以下答案描述了如何控制 tmap 中的弹出窗口:stackoverflow.com/a/42180837/13478749。除了在 tmap 中包含不会自动链接到 URL 的链接之外,我想说在 tmap 中控制纯文本弹出窗口与传单一样容易。
  • @hugh-allan 这是一个过时的答案,不再完全有效 - 在其写作时 {tmap} 在 popup.format 中没有 html.escape 参数,并且所有 HTML (包括链接)已被清理,没有追索权。该选项是在今年早些时候(2021 年 3 月)发布的 v3.3-1 中引入的
  • 是的,我很抱歉——我并不是要抹黑你的评论,只是想我会为现在或将来想要这样做的任何人提供一个答案。特别是因为这似乎是搜索该主题时出现的第一个主题。不错的新答案!
  • @hugh-allan 不用担心,我只是认真的 :) 感谢您向我指出这个老问题 - 如果您不这样做,我会让旧答案保持不变,并且不会包括更新的。这将是一种耻辱,因为 {tmap} 背后的好人投入了如此多的时间和精力来改进软件包。
【解决方案2】:

详细说明我之前的答案 - 在撰写本文时有效,但不再是:{tmap} 包最近获得了抑制弹出窗口中 HTML 代码清理的选项(在版本 3.3-1 ,于 2021 年 3 月 5 日发布)。

因此,对于当前的{tmap}有可能在弹出窗口中包含 HTML 代码,并且我之前写过的对文本格式的控制在这里。

对于可能的实现,请考虑以下代码:

library(dplyr)   # for mutate & pipe
library(tmap)    # for the metro dataset

data("metro") # from the tmap package

metro <- metro %>% 
  mutate(label = paste("marvel at ", name, " and follow <a href = https://stackoverflow.com/>stack overflow</a>"))

tmap_mode("view")

tm_shape(metro) +
  tm_bubbles(size = 1, col = "red", 
             popup.vars = c("label"),
             popup.format = list(html.escape = F)) +
  tm_basemap(leaflet::providers$Stamen.Watercolor)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2020-05-02
    相关资源
    最近更新 更多