使用leaflet绘制世界choropleth地图时标签显示异常问题求助
Leaflet分级统计图标签错位修复方案
问题原因
标签错位的核心原因是标签的顺序和传入的空间多边形顺序不匹配:你基于自行构造的df的国家顺序生成了标签列表,但通过subset筛选出来的空间数据集total的行顺序沿用了原始世界边界文件的排序逻辑,两者的国家排列顺序不一致,就会出现悬停A国显示B国标签的问题。
修复方法
将你的自定义数值数据和空间数据集通过国家名称合并,保证每个空间要素和它对应的数值、标签完全匹配后,再生成标签渲染地图即可。修复后的完整代码如下:
## 边界文件来源:http://thematicmapping.org/downloads/world_borders.php ## 设置工作目录,下载并解压边界文件 download.file("http://thematicmapping.org/downloads/TM_WORLD_BORDERS_SIMPL-0.3.zip" , destfile="TM_WORLD_BORDERS_SIMPL-0.3.zip") unzip("TM_WORLD_BORDERS_SIMPL-0.3.zip") ## 加载依赖包 library(leaflet) library(rgdal) ## 读取shp文件为空间多边形数据框 myspdf = readOGR(dsn=getwd(), layer="TM_WORLD_BORDERS_SIMPL-0.3") # 构造自定义数值数据 newdff<-c("Ghana", "Grenada", "Guyana", "India", "Jamaica", "Kenya", "United States","Canada") val<-c(1,2,4,5,5,1000,20000, 100) df<-data.frame(newdff,val) # 核心步骤:合并空间数据和自定义数值数据,保证两者顺序匹配 total <- merge(myspdf, df, by.x = "NAME", by.y = "newdff") # 基于合并后的数据集生成标签,保证每个多边形对应正确的标签 labels <- sprintf( "<strong>国家:%s</strong><br/>对应数值:%g", total$NAME, total$val ) %>% lapply(htmltools::HTML) pal <- colorNumeric("OrRd", total$val) # 渲染分级统计图 leaflet(data=total) %>% addTiles() %>% addPolygons(fillColor = ~pal(val), highlight = highlightOptions(weight = 1, color = "red", fillOpacity = 0.7, bringToFront = TRUE), label=labels)
如果不需要分级染色,只需要固定填充色,把fillColor参数改回"green"即可。
内容的提问来源于stack exchange,提问作者rabeshi1010
相关产品推荐
相关产品推荐

