2017-03-31 53 views
5

假設你有以下的數據幀:R和傳單:如何安排跨多行標籤文本

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

在這種情況下,顯示的信息,因爲我喜歡,但會,相同的標籤內,有一個條目數據集的每個城市。我怎麼能讓一個城市的文字排列成多行?任何幫助將非常感激

回答

7

首先,創建的HTML內容的字符向量爲每個城市,然後包裹在一個lapply調用設置正確顯示HTML屬性在​​

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

map2 
定義 label屬性時
+0

這正是我正在尋找的東西,看起來如此簡單明顯,以至於它本來應該是我自己想到的。只需稍微調整一下你的代碼,最後的')'就不需要了。謝謝。 – LuPi

+0

感謝提示與支架...複製和粘貼錯誤 – TimSalabim