R语言shapefile地图绘制:按参数填充颜色求助
嘿,刚接触R做地图确实容易卡在数据关联和填色这一步,我来一步步帮你解决!
首先,核心问题是要把你的parameter_results属性数据和shapefile空间数据通过共同的标识字段关联起来(比如区域ID、区县名称这类两个数据集都有的字段),然后才能用指定参数给地图上色。下面分两种常用方法来实现:
方法一:用现代的sf+ggplot2(推荐,语法更直观)
现在R里做空间数据首推sf包,比老的rgdal/sp包更友好,先把你的shapefile转成sf对象,再合并数据:
# 加载需要的包 library(sf) library(ggplot2) library(viridis) # 色盲友好的调色板,可选但推荐 # 读取属性数据(你的原有代码) parameter_results <- readRDS("param_results_2014.RDS") # 读取shapefile(用sf的st_read更简洁,替换成你完整的shapefile文件名) NJ_sf <- st_read("V:/lum/WM&S/BEAR (Bureau of Environmental Analysis and Restoration)/Envpln/Hourly Employees/JohnDoe/Rwork/2014IR/Maps/shapefiles/2014_NJ_Integra...shp") # 关键:合并空间数据和属性数据! # 把by改成你两个数据集共有的字段,比如"county_id"或者"region_name",确保格式完全一致 NJ_merged <- merge(NJ_sf, parameter_results, by = "共同标识字段名") # 绘制填色地图,把your_parameter替换成你要用来填色的参数列名 ggplot() + geom_sf(data = NJ_merged, aes(fill = your_parameter)) + # 连续数值用viridis_c,离散分类用viridis_d,name是图例标题 scale_fill_viridis_c(option = "mako", name = "你的参数名称") + theme_minimal() + labs(title = "2014年NJ区域参数分布图")
方法二:用老的sp包(兼容你原来的readOGR代码)
如果你习惯用readOGR返回的SpatialPolygonsDataFrame,也可以这么做:
library(rgdal) library(sp) library(lattice) library(viridis) # 你的原有读取代码 parameter_results <- readRDS("param_results_2014.RDS") NJ <- readOGR(dsn="V:/lum/WM&S/BEAR (Bureau of Environmental Analysis and Restoration)/Envpln/Hourly Employees/JohnDoe/Rwork/2014IR/Maps/shapefiles",layer="2014_NJ_Integra...") # 合并属性数据到空间对象的属性表 NJ@data <- merge(NJ@data, parameter_results, by = "共同标识字段名") # 绘制填色地图,替换成你的参数列名 spplot(NJ, "your_parameter", main = "2014年NJ区域参数分布图", col.regions = viridis(100), # 颜色渐变 legend.title = list(label = "你的参数名称"))
几个关键注意点:
- 必须匹配关联字段:两个数据集一定要有完全对应的字段(比如都是字符型的区域代码,不能一个是"001"一个是数值1),否则合并会失败
- 处理缺失值:如果有些区域在
parameter_results里没有数据,可以用merge(..., all.x = TRUE)保留所有空间区域,缺失值可以用scale_fill_viridis_c(..., na.value = "gray50")设置颜色 - 调色板选择:如果你的参数是离散分类(比如高/中/低),记得把
scale_fill_viridis_c改成scale_fill_viridis_d,或者用scale_fill_brewer选其他色系
内容的提问来源于stack exchange,提问作者NBE
相关产品推荐
相关产品推荐

