如何在保留全球Shapefile完整范围的前提下叠加南美降水栅格数据?
问题描述
我尝试将Natural Earth全球Shapefile与南美降水栅格叠加,使用了以下代码:
# 调用变量 Prec <- raster("C:/Users/DELL/OneDrive/Desktop/test1/wc2.1_10m_prec_01.tif") S_USA <- readOGR(dsn = "C:/Users/DELL/OneDrive/Documents", layer = "South_America") # 裁剪与掩膜 Prec_USA_c <- crop(Prec, S_USA) Prec_USA_m <- crop(Prec_USA_c, S_USA) # 绘图 plot(Prec_USA_m) plot(S_USA, add = TRUE)
但发现全球Shapefile的范围被压缩以适配栅格的范围:
我希望在保留全球Shapefile完整范围的前提下,在其中绘制该栅格数据。
数据来源:
- 降水栅格数据:WorldClim 2.1版本10m分辨率降水数据
- 用于裁剪栅格的南美Shapefile:南美行政区边界数据
- 叠加用的全球Shapefile:Natural Earth 10m分辨率国家边界数据(已移除南极洲)
解决方法
核心逻辑是先绘制全球Shapefile确定绘图范围,再将裁剪后的降水栅格叠加到对应区域,这样既能保留全球底图的完整范围,又能在南美区域显示降水数据。
修改后的代码示例:
# 加载依赖包 library(raster) library(sf) # 推荐用sf替代rgdal,更适配现代空间数据处理 # 读取数据 Prec <- raster("C:/Users/DELL/OneDrive/Desktop/test1/wc2.1_10m_prec_01.tif") S_USA <- st_read(dsn = "C:/Users/DELL/OneDrive/Documents", layer = "South_America") World <- st_read("你的全球Shapefile路径/ne_10m_admin_0_countries.shp") World <- World[World$NAME != "Antarctica", ] # 移除南极洲(未处理时执行) # 裁剪+掩膜:保留南美区域栅格值,其余设为NA Prec_USA_m <- mask(crop(Prec, S_USA), S_USA) # 绘图流程:先画全球底图 plot(st_geometry(World), col = "lightgray", border = "white") # 叠加降水栅格 plot(Prec_USA_m, add = TRUE, legend = TRUE) # 可选:叠加南美边界强化区域 plot(st_geometry(S_USA), add = TRUE, border = "black", lwd = 1.5)
关键细节:
- 先绘制全球Shapefile,会自动将绘图范围锁定为全球,后续叠加的栅格仅在自身有效范围内显示,不会压缩底图
- 用
mask替代第二次crop,能保留栅格结构的同时把区域外值设为NA,绘图时这些区域不会干扰底图显示 - sf包的
st_read比旧版readOGR更高效,语法也更统一
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

