使用terra绘制物种栅格:如何区分背景0值与栅格内真实0值
解决栅格地图背景0值与真实0值区分问题
你的核心问题是地图外的背景值被识别为0,与栅格范围内的真实0值混淆。下面是修改后的代码,通过先分离背景0和真实0,再分类绘图,实现两者的区分:
# 加载所需包 library(terra) # 读取栅格数据 raster_data <- rast("pollinator.tif") # -------------------------- # 关键步骤:区分背景0与真实0 # -------------------------- # 这里需要根据你的数据实际情况调整: # 示例1:如果知道研究区的空间范围,将范围外的0转为NA # 替换成你实际的研究区边界坐标 study_ext <- ext(11.0, 11.5, 47.0, 47.5) # 裁剪到研究区,范围外的像素自动设为NA raster_data <- crop(raster_data, study_ext) # 示例2:如果没有明确范围,可通过其他mask图层标记有效区域(比如从矢量文件转栅格) # mask_vector <- vect("study_area.shp") # raster_mask <- rasterize(mask_vector, raster_data) # raster_data <- mask(raster_data, raster_mask) # -------------------------- # 对真实值(含真实0)进行分类 # -------------------------- # 定义分类断点:将真实0单独作为一类,后续区间对应原分类 breaks <- c(-Inf, 0, 0.006, 0.012, 0.018, 0.024, 0.03, Inf) # 分类规则:NA保持不变,真实0→1,0.000-0.006→2,以此类推 categorized_raster <- classify(raster_data, rcl = cbind(breaks[-length(breaks)], breaks[-1], c(1, 2, 3, 4, 5, 6))) # 将背景NA标记为独立值-1 background_value <- -1 categorized_raster[is.na(categorized_raster)] <- background_value # -------------------------- # 定义对应颜色 # -------------------------- # 顺序:背景(-1)→白色,真实0(1)→浅灰,后续分类对应原配色 colors <- c("white", "#f0f0f0", "#fde725", "#5ec962", "#21918c", "#3b528b", "#440154") # 绘图 plot(categorized_raster, col = colors, main = "传粉者丰度(Andrena strohmella,春季)", xlab = "经度", ylab = "纬度", axes = TRUE, legend = TRUE)
代码说明
- 分离背景与真实值:通过裁剪到研究区或mask图层,将地图外的背景0转为NA,与栅格内的真实0值彻底区分。
- 分类规则调整:新增真实0的专属分类,确保它不会和背景值混为一谈。
- 颜色映射:给背景、真实0、各丰度区间分配不同颜色,直观区分各类值。
栅格绘图示例:
内容的提问来源于stack exchange,提问作者Sibylle Stöckli
相关产品推荐
相关产品推荐

