在R中合并Shapefile与聚合数据并制作Choropleth地图
实现步骤与代码示例
1. 合并Shapefile与聚合数据集
根据你的Shapefile类型(sp或sf)选择对应方法:
情况1:Shapefile为sp包的SpatialPolygonsDataFrame类型
# 直接合并空间对象与聚合数据,按匹配字段关联 library(sp) merged_shp <- merge(my_shapefile, ag_data, by.x = "var1", by.y = "var") # 检查合并结果(确认count字段无NA,因你提到级别完全匹配,此处应全为FALSE) table(is.na(merged_shp@data$count))
情况2:Shapefile为sf包的sf类型(推荐使用)
# 使用dplyr进行左连接,保留所有空间要素 library(dplyr) library(sf) merged_shp <- left_join(my_shapefile, ag_data, by = c("var1" = "var")) # 检查合并结果 table(is.na(merged_shp$count))
2. 制作带图例的分级着色地图
使用leaflet包实现,包含颜色分级、多边形渲染和图例:
library(leaflet) # 定义颜色方案(以colorBin为例,也可按需用colorQuantile/colorNumeric) pal <- colorBin( palette = "YlOrRd", # 颜色渐变方案,可替换为"Blues"等其他配色 domain = merged_shp$count, bins = 5 # 分级数量,可自行调整 ) # 构建leaflet地图 leaflet(merged_shp) %>% addTiles() %>% # 添加默认OpenStreetMap底图 addPolygons( fillColor = ~pal(count), fillOpacity = 0.7, color = "#FFFFFF", # 多边形边界颜色 weight = 1, popup = paste0( # 自定义点击弹窗内容 "分类: ", merged_shp$var1, "<br>", "计数: ", merged_shp$count ) ) %>% addLegend( pal = pal, values = ~count, position = "bottomright", title = "计数分布", # 图例标题 opacity = 0.7 )
补充说明
- 颜色方案:若需要平滑渐变效果,可改用
colorNumeric;若要按分位数分级,使用colorQuantile即可。 - 弹窗内容:可根据需求添加
var2、var3等其他属性字段信息。 - 底图替换:如果不想用默认底图,可通过
addProviderTiles()更换,例如addProviderTiles("CartoDB.Positron")。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

