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

如何在R中用terra::plot为三个SpatRaster设置统一颜色渐变

统一SpatRaster绘图的颜色渐变尺度

要解决裁剪后子栅格与原栅格绘图颜色尺度不一致的问题,核心是基于原栅格的全局数值范围设置所有绘图的统一颜色标尺,具体实现如下:

1. 获取原栅格的全局数值范围

先提取原DTM栅格的最小和最大值,作为所有绘图的统一颜色上下限:

# 获取原栅格的全局最小/最大值(忽略NA值)
dtm_range <- global(DTM_50570, c("min", "max"), na.rm = TRUE)
# 转换为向量方便后续调用
color_limits <- c(dtm_range$min, dtm_range$max)

2. 统一设置绘图的颜色参数

在terra::plot中,通过range参数指定统一的数值范围,同时配合col参数使用一致的颜色渐变方案,即可让所有栅格的颜色映射保持统一。

修改后的完整代码

library(terra)

DTM_50570_32632 <- rast(paste0("Downloads/w50570_s10/w50570_s10/w50570_s10.tif"))
DTM_50570 <- project(x = DTM_50570_32632, "EPSG:4326")

DTM_longitude <- c(11.80111, 11.80222, 11.80333, 11.95111, 11.95222, 11.95333)
DTM_latitude <-c(45.98333, 45.98777, 45.98555, 45.94111, 45.94888, 45.94333)

group_1_extent <- ext(11.80, 11.81, 45.98, 45.99)
DTM_group_1 <- crop(DTM_50570, group_1_extent)

group_2_extent <- ext(11.95, 11.96, 45.94, 45.95)
DTM_group_2 <- crop(DTM_50570, group_2_extent)

DTM_longitude_group_1 <- c(11.80111, 11.80222, 11.80333)
DTM_latitude_group_1 <-c(45.98333, 45.98777, 45.98555)

DTM_longitude_group_2 <- c(11.95111, 11.95222, 11.95333)
DTM_latitude_group_2 <-c(45.94111, 45.94888, 45.94333)

# 获取原栅格全局数值范围
dtm_range <- global(DTM_50570, c("min", "max"), na.rm = TRUE)
color_limits <- c(dtm_range$min, dtm_range$max)
# 定义统一的颜色渐变方案
color_palette <- terrain.colors(100)

par(mfrow = c(1, 3))
# 原栅格绘图:指定统一颜色范围
plot(DTM_50570, main = "DTM", range = color_limits, col = color_palette)
points(DTM_longitude, DTM_latitude, pch = 20)

# 子栅格1绘图:复用相同的颜色范围与配色
plot(DTM_group_1, main = "DTM group 1", range = color_limits, col = color_palette)
points(DTM_longitude_group_1, DTM_latitude_group_1, pch = 20)

# 子栅格2绘图:复用相同的颜色范围与配色
plot(DTM_group_2, main = "DTM group 2", range = color_limits, col = color_palette)
points(DTM_longitude_group_2, DTM_latitude_group_2, pch = 20)

关键细节说明

  • range参数:强制所有绘图使用指定的数值范围作为颜色映射的上下限,从根源保证标尺一致。
  • col参数:统一使用相同的颜色渐变方案(如terrain.colors),避免因颜色生成逻辑差异导致的视觉偏差。
  • 若需要更精细的颜色分段,可替换range为breaks参数,手动指定颜色分割点(例如breaks = seq(color_limits[1], color_limits[2], length.out = 101)),同时配合对应数量的颜色值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:39:50