如何解决R语言leaflet中addFlows箭头弹窗标签不动态的问题?
解决leaflet.minicharts中addFlows弹窗内容不匹配的问题
问题出在你传递弹窗内容的方式:直接将整个字符向量传给popupArgs(labels = ...)时,addFlows没有正确将每个弹窗与对应的流绑定,导致所有弹窗都显示向量的第一个元素。
修正方案
直接为每个流生成对应的弹窗文本字符向量,传递给popup参数即可:
flowArrows <- data.frame( out_lng = c(19, 19, 19), out_lat = c(52, 52, 52), out_iso = c("PL", "PL", "PL"), in_lng = c(23, 15, 10), in_lat = c(55, 49, 52), in_iso = c("LT", "CZ", "DE"), value = c(1, 3, 5) ) leaflet() %>% addProviderTiles(providers$Esri.WorldGrayCanvas) %>% setView(lng = 17.03097722271075, lat = 51.11043372425852, zoom = 5) %>% addFlows( flowArrows$out_lng, flowArrows$out_lat, flowArrows$in_lng, flowArrows$in_lat, flow = flowArrows$value, # 直接生成每个流对应的弹窗文本向量 popup = paste0(flowArrows$out_iso, " to ", flowArrows$in_iso, ": ", flowArrows$value), color = "#FF0000" )
原理说明
addFlows的popup参数支持接收字符向量,向量中的每个元素会被自动绑定到对应的流箭头。这样每个箭头点击后,弹窗会显示对应行的out_iso、in_iso和value组合的文本。
如果需要更复杂的HTML弹窗,可以用lapply遍历数据框每一行生成自定义HTML内容:
# 生成带样式的HTML弹窗 popup_html <- lapply(1:nrow(flowArrows), function(i) { row <- flowArrows[i, ] HTML(paste0( "<strong>", row$out_iso, " to ", row$in_iso, "</strong><br>", "流量数值: ", row$value )) }) leaflet() %>% addProviderTiles(providers$Esri.WorldGrayCanvas) %>% setView(lng = 17.03097722271075, lat = 51.11043372425852, zoom = 5) %>% addFlows( flowArrows$out_lng, flowArrows$out_lat, flowArrows$in_lng, flowArrows$in_lat, flow = flowArrows$value, popup = popup_html, color = "#FF0000" )
内容的提问来源于stack exchange,提问作者tomsu
相关产品推荐
相关产品推荐

