R语言空间绘图:将超100的值映射为90-100区间的深绿色
解决空间绘图中超出色阶范围数值的颜色显示问题
问题描述
制作了色阶范围为-100到100的空间绘图,但绘图数据的实际范围是-100到1500,导致数值超过100的区域显示为白色。需要将所有数值超过100的区域统一设置为色阶中90-100区间的深绿色。
解决方案
核心思路是将超出色阶上限的数值钳制到色阶最大值(100),这样这些数值会自动匹配最高色阶区间的颜色,无需调整色阶和颜色映射。
修改后的完整代码
brks <- seq(-100,100,10) length(brks) colorscale <- colorRampPalette(brewer.pal(11, "BrBG"))(length(brks)-1) # 关键修改:将超过100的数值钳制为100 prnew_clamped <- pmin(prnew, 100) windows() # 使用钳制后的数据绘图 image.plot(lon,lat,prnew_clamped,col=colorscale,breaks=brks,lab.breaks=brks, xaxt="n", yaxt="n", ann=FALSE) map(database="world", add=TRUE) # 自定义坐标轴 axis(side=1, at=seq(-180,177.5,20), labels=seq(-180,177.5,20)) axis(side=2, at=seq(-80,80,10), labels=seq(-80,80,10), las=2) abline(h=seq(-80,80,10), v=seq(-180,177.5,20),lty=2,col="grey",lwd=0.5) title(main=paste('Relative Bias PR (RCM-EOBS)',SEA[1],'1976-2005',sep=" ") ,line=2,cex.lab=1, cex.axis=1.5, cex.main=2, cex.sub=1.5) mtext("%", side=4, line=2,cex=1.5)
关键修改说明
- 使用
pmin()函数:该函数会逐个比较prnew中的每个元素和100,取较小值作为结果,从而把所有大于100的数值替换为100 - 保持色阶参数不变:原有的
breaks和colorscale无需调整,被钳制到100的数值会自动对应到色阶的最高区间(90-100),也就是需要的深绿色
内容的提问来源于stack exchange,提问作者kettaren ray
相关产品推荐
相关产品推荐

