如何使用R将颜色分配给特定的栅格值


9

我正在使用levelplot超赞rasterVis包的功能来创建一个地图,其值在零附近变化。我正在使用红色到蓝色调色板绘制栅格文件,但是我试图在地图中将灰色分配为零值。

具体来说,我想复制此图的颜色:

在此处输入图片说明

请注意,这里使用的是红色到蓝色的比例,但零值已用灰色上色。

目前,我的地图如下所示:在此处输入图片说明

这是再现它的代码(文件可在https://www.dropbox.com/s/cypfdu1eaz2fuok/r.annual.tif?dl=0上获得):

# Load required packages
library(rasterVis)

# open file
r.annual <- raster("Downloads/r.annual.tif")

# Set color palette
myTheme=rasterTheme(region=brewer.pal('RdBu', n=11))

# Plot
levelplot(annual.mask, par.settings=myTheme, margin=F)

如何在上面的地图中为所有零值分配灰度?

Answers:


7

您可以通过连接两个预定义的调色板和所需的灰色来定义自己的调色板:[红色橙黄色调色板] + [零灰度] + [蓝色调色板]。要使零值与灰色对齐,必须n为预定义的调色板使用相同数量的颜色()。

尝试下面的注释代码:

# Load libraries
library('rasterVis')

# open raster file
r.annual <- raster("r.annual.tif")

# Set color palette
zeroCol <-"#B3B3B3" # (gray color, same as your figure example)
reds <- rev(brewer.pal('YlOrRd', n = 7))
blues <- brewer.pal('Blues', n = 7)

myTheme <- rasterTheme(region = c(reds, zeroCol, blues))

# Plot
levelplot(r.annual, par.settings = myTheme, margin = FALSE, main = expression("Precipitation" ~ (mm ~ year^{-1})))

情节

请注意,您的绘图看起来不会像您发布的图形示例那样,因为栅格中包含许多Nas的数据具有更稀疏的数据


谢谢回复。我意识到我的问题可能是地图上的NA过多。尝试myTheme$panel.background$col = 'grey70'myTheme线条后添加并绘制它以查看结果。显然,现在我需要消除图像周围过多的NA区域。
thiagoveloso

2
别客气!请注意,0值不同于NA值。它们也有不同的含义。您可以为两者分配相同的颜色,但是我认为这不合适。如果您想要一个看起来像您发布的图的降水栅格(更多数据),则建议您尝试使用适当的预测模型对数据进行插值。
古兹曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.