Supposons que vous ayez la trame de données suivante:
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))
Mon idée est d'avoir une carte de ces villes et des étiquettes qui pourraient afficher des informations pertinentes lors du survol des cercles de villes correspondants. J'aimerais que le texte de l'étiquette soit organisé en plusieurs lignes. La toute première approche ci-dessous a échoué:
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 ) )
ainsi que d'autres tentatives similaires. Après avoir googlé un moment, j'ai trouvé une solution possible en impliquant le package 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>' ) ) )
Dans ce cas, les informations sont affichées comme je le souhaiterais mais, dans le même libellé, il existe une entrée pour chaque ville de l'ensemble de données. Comment pourrais-je faire pour disposer le texte d'une seule ville en plusieurs lignes? Toute aide sera grandement appréciée
Créez d'abord un vecteur de caractères de contenu html pour chaque ville, puis encapsulez-le dans un appel lapply
pour définir l'attribut HTML
pour un affichage correct lors de la définition de l'attribut label
dans 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