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

新西兰某物种阈值型生境适宜性地图制作问题求助

生境适宜性地图阈值可视化问题解决方法

我正在为新西兰某物种制作生境适宜性(HS)地图,需求是仅展示阈值以上区域的分级效果,而非全区域热力图。阈值设置为观测点HS值减去0.05,但遇到两个问题:

  • 将低于阈值的区域设为0后,地图高适宜性区域颜色偏深,但希望刚达标的区域颜色更浅;
  • 将低于阈值区域设为NA时,分级热力图生效,但包括面板背景在内的所有区域都变灰,叠加新西兰边界的geom_sf图层也无法解决。

核心解决思路

先把低于阈值的区域设为NA(保留有效分级的HS值),再通过调整ggplot图层顺序、背景色和颜色映射规则,解决背景变灰问题,同时实现“刚达标区域浅、高适宜区域深”的分级效果。

具体修改步骤

1. 修正栅格数据处理逻辑

直接把低于阈值的区域设为NA,同时用新西兰边界裁剪并遮罩栅格,只保留境内的有效数据:

# 计算阈值
threshold <- observed_hss[1,1] - 0.05
# 保留阈值以上的HS值,低于的设为NA
hs_raster <- ifel(y2 < threshold, NA, y2)
# 裁剪+遮罩,只保留新西兰境内的栅格数据
hs_raster_nz <- terra::mask(terra::crop(hs_raster, nz_map), nz_map)

2. 调整ggplot绘图代码

重点调整图层顺序、背景色和颜色映射,解决背景灰、颜色深浅颠倒的问题:

# 自定义渐变色(如果默认的caw_seq_4起始色不够浅,可以手动替换)
custom_pal <- get_pal("caw_seq_4")
# 示例手动浅色调:custom_pal <- c("#f0f8ff", "#87ceeb", "#4682b4", "#1e3a8a")

binary_p <- ggplot() +
  # 先设置面板样式,背景设为白色
  theme_bw() +
  theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_rect(fill = "white")
  ) +
  # 先画新西兰边界(填充白色,作为底图)
  geom_sf(data = nz_map, fill = "white", color = "black") +
  # 叠加处理后的境内栅格
  geom_spatraster(data = hs_raster_nz, maxcell = 3e5, interpolate = T) +
  # 设置颜色映射:从阈值到最大值渐变,NA区域透明
  scale_fill_gradientn(
    colours = custom_pal,
    na.value = "transparent",
    limits = c(threshold, max(y2[], na.rm = TRUE)),
    breaks = seq(threshold, max(y2[], na.rm = TRUE), length.out = 4),
    labels = function(x) round(x, 2)
  ) +
  # 用coord_sf适配空间数据,替代coord_fixed
  coord_sf(expand = c(0.01, 0.01)) +
  labs(
    fill = "生境适宜性",
    x = "经度",
    y = "纬度"
  )

关键说明

  • terra::mask能彻底过滤境外区域,避免NA区域干扰;
  • 图层顺序必须是“背景→边界→栅格”,NA区域透明后会显示下方的白色边界,不会出现全灰;
  • scale_fill_gradientn的limits参数限定颜色从阈值开始映射,刚达标的区域自然对应最浅的颜色,高值对应深色;
  • coord_sf比coord_fixed更适配空间图层,避免坐标错位。

内容的提问来源于stack exchange,提问作者rose_rox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:50:27