R和Leaflet:如何跨多行排列标签文本

LuP*_*uPi 18 r leaflet

假设您有以下数据框:

cities = data.frame( name = c('Madrid','Barcelona','Sevilla'),
                 country = c('Spain','Spain','Spain'),
                 region = c('Comunidad de Madrid','Cataluña','Andalucia'),
                 data = c(100, 200, 300), 
                 lng = c(-3.683333,2.166667,-6.083333),
                 lat = c(40.433333,41.383333,37.446667))
Run Code Online (Sandbox Code Playgroud)

我的想法是拥有这些城市和标签的地图,可以在悬停相应的城市圈时显示一些相关信息.我想将标签文字排成几行.下面的第一种方法失败了:

library( leaflet )

map = leaflet( cities ) %>%
addTiles() %>%
addCircles( lng = ~lng, lat = ~lat, fillColor = 'darkBlue', radius = 10000, 
          stroke = FALSE, fillOpacity = 0.8, label = paste0( cities$name,'\n', cities$region, '\n', cities$country, '\n', cities$data ) )
Run Code Online (Sandbox Code Playgroud)

以及其他类似的尝试.谷歌搜索了一段时间后,我通过涉及htmltools包找到了一个可能的解决方案:

library( htmltools )
map2 = leaflet( cities ) %>%
addTiles() %>%
addCircles( lng = ~lng, lat = ~lat, fillColor = 'darkBlue', radius = 10000, 
          stroke = FALSE, fillOpacity = 0.8, 
          label = HTML( paste0( '<p>', cities$name, '<p></p>', cities$region, ', ', cities$country,'</p><p>', cities$data, '</p>' ) ) )
Run Code Online (Sandbox Code Playgroud)

在这种情况下,信息显示为我想要的,但在同一标签内,数据集的每个城市都有一个条目.我怎么能让一个城市的文字排成多行呢?任何帮助将非常感激

Tim*_*bim 27

首先,为每个城市创建一个html内容的字符向量,然后在lapply调用中将其包装起来,以便在HTML定义label属性时设置正确显示的属性adCircles

labs <- lapply(seq(nrow(cities)), function(i) {
  paste0( '<p>', cities[i, "name"], '<p></p>', 
          cities[i, "region"], ', ', 
          cities[i, "country"],'</p><p>', 
          cities[i, "data"], '</p>' ) 
})

map2 = leaflet( cities ) %>%
  addTiles() %>%
  addCircles(lng = ~lng, lat = ~lat, fillColor = 'darkBlue', radius = 10000, 
              stroke = FALSE, fillOpacity = 0.8,
              label = lapply(labs, htmltools::HTML))

map2
Run Code Online (Sandbox Code Playgroud)

  • 在2019年,如果`labs`已经是`cities`中的一列,您可以继续使用`〜`模式`addCircles(label =〜HTML(labs),...)`,也可以`paste(sep = &lt; br /&gt;,...)`是多行的替代标签构建模式(https://rstudio.github.io/leaflet)/popups.html) (3认同)
  • [弹出窗口文档网站](https://rstudio.github.io/leaflet/popups.html) 的完整链接。谢谢@Nova!(抱歉,由于年龄原因,无法编辑之前的评论) (3认同)
  • @Nate 的评论确实对我有帮助。我不想在标签中的单独行之间有空格,答案是“&lt;br/&gt;”(而不是“&lt;p&gt;”和“&lt;/p&gt;”)。 (2认同)

小智 5

以下也适用于两个标签:

labels <- sprintf(
  "<strong>%s</strong><br/>%g people / mi<sup>2</sup>",
  states$name, states$density
) %>% lapply(htmltools::HTML)

m <- m %>% addPolygons(
  fillColor = ~pal(density),
  label = labels,
  labelOptions = labelOptions(
    style = list("font-weight" = "normal", padding = "3px 8px"),
    textsize = "15px",
    direction = "auto"))

m

Run Code Online (Sandbox Code Playgroud)

请参阅此处了解更多信息。

ps:我想将它用于三个标签,但未能成功。