次のデータフレームがあるとします。
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つの都市のテキストを複数行に配置するにはどうすればよいですか?どんな助けでも本当にいただければ幸いです
まず、各都市の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