如何在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
相关产品推荐
相关产品推荐

