首页 > 解决方案 > 使用 HTML 为传单设计悬停文本 - 如何为每个逗号插入中断

问题描述

我正在使用传单来绘制观察结果。我还使用htmltools来格式化显示每个观察变量的悬停文本。

问题是,我想要包含许多字符串的变量hobbies显示在每一行。每个爱好用逗号分隔。

安装和加载所需的包:

install.packages("leaflet")
library(leaflet)
install.packages("htmltools")
library(htmltools)

创建虚拟观察:

name <- c("john", "mary")
age <- c(20, 29)
gender <- c("male", "female")
hobbies <- c("fishing, football, video games", "painting, skiing, body pump, data science")
lat <- c(-12.80103, -12.37845)
long <- c(130.9558, 130.8770)

df <- as.data.frame(cbind(name, age, gender, hobbies, lat, long))

使用传单创建地图:

# Designing hover text with HTML
# lapply here necessary - my real data has much more than 2 rows#
labs <- lapply(seq(nrow(df)), function(i) {
  paste0( '<p>', "Name : ", df[i, "name"], '<p></p>', 
          "Age : ", df[i, "age"], ', ', 
          "Gender : ", df[i, "gender"],'</p><p>',
          "Hobbies : ", df[i, "hobbies"], ','
  )
})

leaflet(df) %>% 
  addProviderTiles("Esri.WorldImagery") %>% 
  addCircleMarkers(lng = ~ long, 
                   lat= ~ lat, 
                   label = lapply(labs, HTML),
                   clusterOptions = markerClusterOptions()
                   ) 

我得到以下输出:

我的输出

我不熟悉 html 语法。我不知道如何为每个爱好添加断线
以显示在单独的行上,并带有如下选项卡:

Name : mary
Age : 29, Gender : female
Hobbies : painting
          skiing
          body pump
          data science

标签: rr-leaflet

解决方案


您可以gsubhobbies向量上使用逗号替换每个逗号,后跟换行符:

hobbies <- c("fishing, football, video games", "painting, skiing, body pump, data science") %>%
  gsub(",", ",<br>", .)

然后构建您的数据框并正常生成标签。

如果您希望爱好列表彼此对齐,您可以简单地在换行符后插入一些 html 空白字符。我发现四&emsp;+一&ensp;填充了适量的空间。

hobbies <- c("fishing, football, video games", "painting, skiing, body pump, data science") %>%
  gsub(",", ",<br>&emsp;&emsp;&emsp;&emsp;&ensp;", .)

最后,请注意,为了让您的示例运行,我必须更改df <- as.data.frame(cbind(name, age, gender, hobbies, lat, long))df <- data.frame(name, age, gender, hobbies, lat, long) ,因为您提供的代码将您的坐标转换为导致传单抛出错误的因素。我认为这只是你把这个例子放在一起的方式的一个错误,而不是你的真实数据。


推荐阅读