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

如何将栅格图层值1设为白色,实现偏离1的渐变对比配色?

栅格图层配色优化求助

我尝试绘制栅格图层,希望将值1设置为白色。参考诸多示例后仍无法实现理想配色:要求低于1和高于1的值使用对比色,色调随与1的距离增加而加深。目前已基于模拟数据生成效果不佳的图,无法提供真实数据,优先希望使用viridis配色方案。

断点与配色思路参考了GIS社区相关帖子,shapefile取自国家行政边界数据网站。以下是示例代码:

library(rgdal)
library(raster)
library(sp)
library(sf)

set.seed(123)

proj = " +units=km +proj=utm +zone=37 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +no_defs"

map0 = readOGR(dsn = "dataFiles/gadm40_NGA_shp",   # 尼日利亚行政边界数据
           layer = "gadm40_NGA_0")

map0_trnsfrmd = spTransform(map0,proj) 

predRaster <- raster(ncol=400, nrow=400, xmn=-3805.7869, xmx=-2222.120, ymn=562.5405, ymx=1828.165)

res(predRaster) = 5

projection(predRaster) = " +units=km +proj=utm +zone=37 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +no_defs"

idx = 1:80201 # index for the cell numbers

val = c(rnorm(50000), rep(1,10201),runif(20000,min=0, max=3))

r = setValues(predRaster, values = val, index=idx) # assign values to the cells

r = raster::mask(crop(r, extent(map0_trnsfrmd)), map0_trnsfrmd, snap = 'out')

below=val[val<1]
above=val[val>1]

min(below)
[1] -4.289319
max(above)
[1] 4.438207
max(below)
[1] 0.9998253
min(above)
[1] 1.000105

breakpoints = c(-4.289319, 0.9998253, 1.000105, 4.438207)

colors = c("red","white","blue")

par(mgp=c(4,1,0), mar=c(5,7,3,1)+0.1)

plot(r,las=1, asp = 1, xlab="Easting", ylab="Northing", axis.args = list(cex.axis=1),
 legend.shrink =1,legend.width=2, cex.lab=2, cex.axis=1.5, legend.args = list("title", cex =1),breaks=breakpoints,col=colors)

当前效果图:
示例效果图

恳请各位提供可行建议。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:00:20