You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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)

代码说明

  1. 分离背景与真实值:通过裁剪到研究区或mask图层,将地图外的背景0转为NA,与栅格内的真实0值彻底区分。
  2. 分类规则调整:新增真实0的专属分类,确保它不会和背景值混为一谈。
  3. 颜色映射:给背景、真实0、各丰度区间分配不同颜色,直观区分各类值。

栅格绘图示例:
传粉者丰度栅格图

内容的提问来源于stack exchange,提问作者Sibylle Stöckli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:20:54