如何在R中匹配数据与SpatialPolygonsDataFrame制作Leaflet分级统计图
解决区域匹配与Leaflet分级统计图制作问题
首先,你遇到的核心问题是把自定义数据框mydata里的prop数值,和从GADM获取的SpatialPolygonsDataFrame(SPDF)中的区域精准匹配,然后基于这个匹配结果生成Leaflet分级统计图。下面是一步步的实操方案:
步骤1:合并多国家空间数据并确认匹配键
从GADM下载的每个国家SPDF里,已经自带了国家名称列NAME_0和一级区域名称列NAME_1,这两个字段刚好能和mydata里的cntry、region_name一一对应——同时用这两个字段匹配,能避免不同国家出现同名区域时的匹配错误。
先把两个国家的SPDF合并成一个整体:
# 合并法国和德国的一级区域空间数据 combined_spdf <- do.call(rbind, all_maps)
步骤2:将自定义数据与空间数据匹配合并
我们可以用sp包的merge()函数,把mydata中的prop值绑定到SPDF的属性表中,匹配的核心是国家名称+区域名称的组合键:
# 基于国家和区域名称,将mydata的prop值合并到SPDF中 merged_spdf <- merge( combined_spdf, mydata, by.x = c("NAME_0", "NAME_1"), # SPDF里的匹配字段 by.y = c("cntry", "region_name") # mydata里的对应字段 )
这一步完成后,每个区域的空间数据就会带上对应的prop数值了。如果担心有匹配失败的区域,可以用sum(is.na(merged_spdf$prop))检查,确认mydata里的区域名称和GADM的NAME_1拼写完全一致(比如特殊字符、大小写都要对应)。
步骤3:用Leaflet生成分级统计图
现在就可以基于匹配好的空间数据绘图了,我们可以用颜色映射来展示prop的差异,同时添加弹窗和图例提升可读性:
# 定义颜色调色板(这里用viridis色系,也可以换成Blues、Reds等) pal <- colorNumeric(palette = "viridis", domain = merged_spdf$prop) # 绘制Leaflet交互地图 leaflet(merged_spdf) %>% addTiles() %>% # 添加默认底图 addPolygons( fillColor = ~pal(prop), # 填充色绑定prop值 fillOpacity = 0.7, color = "#333333", # 区域边界颜色 weight = 1, # 点击区域显示的弹窗信息 popup = ~paste0( "<strong>国家:</strong> ", NAME_0, "<br>", "<strong>区域:</strong> ", NAME_1, "<br>", "<strong>比例:</strong> ", round(prop, 3) ) ) %>% addLegend( # 添加颜色图例 pal = pal, values = ~prop, title = "比例值", position = "bottomright" )
如果想手动设置分级区间,也可以把colorNumeric换成colorBin,比如分成5个区间:
pal <- colorBin(palette = "Blues", domain = merged_spdf$prop, bins = 5)
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

