You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:30:34