Como atribuir cores a valores raster específicos usando R

9

Estou usando a levelplotfunção do rasterVispacote incrível para criar um mapa cujos valores divergem em torno de zero. Estou plotando um arquivo raster usando uma paleta de vermelho para azul, mas estou tentando atribuir valores de cinza a zero no mapa.

Especificamente, quero reproduzir as cores desta figura:

insira a descrição da imagem aqui

Observe que onde uma escala de vermelho a azul é usada, mas os valores zero foram coloridos em cinza.

Atualmente, meus mapas são assim:insira a descrição da imagem aqui

E este é o código para reproduzi-lo (arquivo disponível em 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)

Como posso atribuir cinza a todos os valores zero no meu mapa acima?

thiagoveloso
fonte

Respostas:

7

Você pode definir sua própria paleta de cores concatenando duas paletas de cores predefinidas e a cor cinza desejada como: [paleta amarelo laranja vermelho] + [cor cinza zero] + [paleta blues] . Para alinhar o valor zero com a cor cinza, use o mesmo número de cores ( n) nas paletas de cores predefinidas.

Experimente o código comentado abaixo:

# 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})))

enredo

Observe que sua plotagem não será parecida com o exemplo de figura que você postou porque sua varredura possui dados mais esparsos com muitas Nas

Guzmán
fonte
Obrigado pela resposta. Percebi que meu problema provavelmente é muitas NAs no mapa. Tente adicionar myTheme$panel.background$col = 'grey70'depois da sua myThemelinha e plote-a para ver o resultado. Aparentemente, agora eu preciso me livrar das áreas excessivas de NA ao redor da imagem.
Thiagoveloso 19/05
2
Você é bem vindo! Observe que o 0valor é diferente do NAvalor. Também eles têm significados diferentes. Você pode atribuir a mesma cor para ambos, mas acho que não é apropriado. Se você deseja ter uma varredura de precipitação parecida com a figura que você postou (mais dados), uma sugestão talvez esteja tentando interpolar seus dados seguindo um modelo de previsão apropriado.
Guzmán