如何在R中实现跨NA区域栅格渐变,复刻ArcGIS GWR输出效果?
复刻ArcGIS GWR栅格渐变填充效果的R实现方法
要实现ArcGIS地理加权回归(GWR)输出的连续渐变填充栅格效果,核心是对离散采样点的栅格进行空间插值,填补无值(NA)区域。以下是基于stars和gstat包的具体实现步骤:
核心思路
st_rasterize仅将采样点映射到对应栅格单元,其余区域保留NA;而ArcGIS的渐变效果是通过空间插值算法(如反距离权重IDW、克里金)将离散值预测到整个栅格范围,生成连续的渐变表面。
完整实现代码
library(tidyverse) library(sf) library(stars) library(gstat) # 1. 准备采样点数据(以quakes数据集为例) df <- quakes %>% select(depth, long, lat) %>% st_as_sf(coords = c("long", "lat"), crs = 4326) # 2. 创建目标栅格模板(自定义分辨率,dx/dy控制栅格大小) rast_template <- st_bbox(df) %>% st_as_stars(dx = 0.2, dy = 0.2) %>% st_set_crs(4326) # 3. 反距离权重(IDW)插值——快速生成渐变栅格 idw_interp <- idw(depth ~ 1, df, newdata = rast_template) # 转换为stars对象用于ggplot可视化 interp_rast <- st_as_stars(idw_interp) %>% select("var1.pred") # 4. 可视化插值后的渐变栅格 ggplot() + geom_stars(data = interp_rast) + scale_fill_viridis_c(na.value = "transparent", option = "plasma") + labs(title = "IDW插值生成的渐变栅格", fill = "Depth (km)") + theme_minimal() + coord_sf()
进阶:更精确的克里金插值
如果需要更专业的空间预测(匹配GWR的统计建模逻辑),可以使用克里金插值:
# 拟合变异函数(球状模型为例) vgm_model <- variogram(depth ~ 1, df) %>% fit.variogram(model = vgm("Sph")) # 普通克里金插值 krige_interp <- krige(depth ~ 1, df, newdata = rast_template, model = vgm_model) krige_rast <- st_as_stars(krige_interp) %>% select("var1.pred") # 可视化克里金插值结果 ggplot() + geom_stars(data = krige_rast) + scale_fill_viridis_c(na.value = "transparent") + labs(title = "克里金插值生成的渐变栅格", fill = "Depth (km)") + theme_minimal() + coord_sf()
关键说明
- 栅格分辨率:通过
dx和dy参数调整,值越小栅格越精细,计算量也越大 - 插值方法选择:IDW适合快速生成渐变效果,克里金基于空间自相关性,预测精度更高
- 颜色映射:可通过
scale_fill_*系列函数自定义渐变配色,匹配ArcGIS的视觉风格
内容的提问来源于stack exchange,提问作者ttalVlatt
相关产品推荐
相关产品推荐

