如何用R将lu_effic指标填充到sf格式行政地图图层?
问题需求
将指标lu_effic作为填充色渲染到孟加拉国行政地图上,实现行政面按指标值着色的可视化效果。
原代码核心问题
- urb_dtf是点坐标格式的数据集,使用
geom_polygon(面要素绘图函数)渲染逻辑完全错误,无法生成面填充效果 - sf格式的行政边界对象
shp_dt本身未关联lu_effic指标,直接添加fill参数无法识别对应变量 - 未做空间属性关联,点数据的指标值无法映射到对应的行政面单元
- 存在笔误:原代码中未定义
dtafil对象,实际应使用读取的urb_dt调用列
修复后的实现代码
# 加载依赖包 library(sf) library(ggplot2) library(dplyr) # 1. 读取点数据并转为sf空间点对象 urb_dt <- read.csv("GHS_STAT_V1_2_BGD.csv") urb_sf <- st_as_sf(urb_dt, coords = c("GCPNT_LON", "GCPNT_LAT"), # 指定经纬度列 crs = 4326) # 设定WGS84坐标系,和常规行政shp兼容 # 2. 读取行政边界shp,统一坐标系 shp_dt <- st_read("bgd_admbnda_adm3_bbs_20201113.shp") shp_dt <- st_transform(shp_dt, crs = st_crs(urb_sf)) # 3. 空间连接+聚合:将点的lu_effic指标关联到对应行政面 # 单个行政面内有多个点时,按需选择聚合规则:平均值/中位数/最大值等 shp_with_index <- st_join(shp_dt, urb_sf) %>% group_by(ADM3_PCODE) %>% # 按行政面唯一编码分组 summarise(lu_effic = mean(lu_effic, na.rm = TRUE)) # 4. 可视化渲染 ggplot() + # 行政面填充,用关联后的lu_effic作为着色依据 geom_sf(data = shp_with_index, aes(fill = lu_effic), color = "white", # 行政边界线颜色 linewidth = 0.1) + # 行政边界线粗细 # 配色调整,也可替换为分类配色函数scale_fill_brewer等 scale_fill_viridis_c(option = "mako", na.value = "gray90", name = "土地利用效率") + # 其他可视化元素配置 labs(title = "孟加拉国三级行政单元土地利用效率分布") + theme_minimal() + theme( axis.text = element_blank(), axis.title = element_blank(), panel.grid = element_blank() )
补充说明
如果你的lu_effic本身就是行政面级别的指标,两个表存在共同的行政编码列(如行政名称、行政编码),可直接用left_join(shp_dt, urb_dtf, by = "公共列名")关联属性,不需要做空间匹配。
内容的提问来源于stack exchange,提问作者Kibria
相关产品推荐
相关产品推荐

