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

时间:2017-03-31 15:37:07

标签: 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))

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

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 ) )

以及其他类似的尝试。谷歌搜索了一段时间后,我通过参与 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>' ) ) )

在这种情况下,信息会按照我的意愿显示,但在同一标签中,数据集的每个城市都有一个条目。我怎么能让一个城市的文字排成多行呢?任何帮助都会非常感激

1 个答案:

答案 0 :(得分:25)

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

adCircles