假设您有以下数据框:
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>' ) ) )
在这种情况下,信息会按照我的意愿显示,但在同一标签中,数据集的每个城市都有一个条目。我怎样才能将单个城市的文本排列在多行中?任何帮助将不胜感激
首先,为每个城市创建一个 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
以下内容也适用于两个标签:
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
有关更多信息,请参阅此处。
p.s:我想把它用于三个标签,但无法做到。
@goodyonsen 可以添加更多标签,例如您想要 3 个标签,在这种情况下添加一个额外的中断和足够的说明符(例如 %g(。在您的代码中,要将其转换为 3 个标签(例如添加另一个字符串 -name-(,您可以执行以下操作:
labels <- sprintf(
"<strong>%s</strong><br/>%g people / mi<sup>2</sup><br/>%s",
states$name, states$density, states$name
) %>% lapply(htmltools::HTML)
R 传单