我有一个栅格,我想用image()
绘制它。到目前为止,我已经使用自己的色标col
绘制了栅格。
## read the libraries
library(raster)
library(fields)
library(grDevices)
##random raster object
set.seed(1)
r <- raster(ncol=5, nrow=5)
r[] <- rnorm(n=ncell(r),mean=2)
col = colorRampPalette(c("darkred","red","lightskyblue","blue","blue4"))(20)
image(r, xaxs="i", yaxs="i", col= rev(col))
这看起来像
现在,我想将所有高于2的值绘制为“暗”(我的色标中的初始颜色)
我找到了similar post并尝试了
zlim=2
newcol = ifelse(raster(r) >= zlim,"darkred",col)
image(r, xaxs="i", yaxs="i", col= newcol)
但是,我收到一些错误消息。如果有人可以帮助我,这将是有帮助的。
答案 0 :(得分:0)
嗯...除非您真的了解how col
works,否则我不会在尝试时开始使用它(您实际上打算更改您使用的色标,并且可能最终会出现意想不到的情况)结果)。
顺便说一句,您的错误可能是由于使用raster(r) >= zlim
而不是r[] >= zlim
(但如上所述,即使更正了,您的结果也不正确)。
我似乎更容易和更透明地选择在初始值(add=True
)之上绘制一个新栅格,并在阈值之上(此处为1,其中栅格> = 2)之上使用单个值,定义的颜色(此处为黄色,使其可见但您可以进行调整),以及在其他位置均不适用(以使透明可见原始栅格):
library(raster)
# Your example
set.seed(1)
r <- raster(ncol=5, nrow=5)
r[] <- rnorm(n=ncell(r),mean=2)
col = colorRampPalette(c("darkred","red","lightskyblue","blue","blue4"))(20)
par(mfrow = c(1,2))
image(r, xaxs="i", yaxs="i", col= rev(col), main='Original')
# build a new raster with 1 where r>=2 and NA elsewhere
newr = r
newr[] = ifelse(newr[] >= 2, 1, NA)
image(r, xaxs="i", yaxs="i", col= rev(col), main='Vals >=2 in yellow')
image(newr, col= "yellow", add=T)