Cómo asignar colores a valores ráster específicos usando R

9

Estoy usando la levelplotfunción del rasterVispaquete impresionante para crear un mapa cuyos valores divergen alrededor de cero. Estoy trazando un archivo ráster con una paleta de rojo a azul, pero estoy tratando de asignar valores grises a cero en el mapa.

Específicamente, quiero reproducir los colores de esta figura:

ingrese la descripción de la imagen aquí

Observe que cuando se usa una escala de rojo a azul, pero los valores cero se han coloreado con gris.

Actualmente, mis mapas se ven así:ingrese la descripción de la imagen aquí

Y este es el código para reproducirlo (archivo disponible en 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)

¿Cómo puedo asignar gris a todos los valores cero en mi mapa de arriba?

thiagoveloso
fuente

Respuestas:

7

Puede definir su propia paleta de colores concatenando dos paletas de colores predefinidas y su color gris deseado como: [paleta roja naranja amarilla] + [color gris cero] + [paleta de azules] . Para obtener un valor cero alineado con el color gris, debe usar el mismo número de colores ( n) para las paletas de colores predefinidas.

Pruebe el código comentado a continuació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})))

trama

Tenga en cuenta que su gráfico no se verá como el ejemplo de la figura que publicó porque su ráster tiene datos más escasos con muchos Nas

Guzmán
fuente
Gracias por la respuesta. Me di cuenta de que mi problema es probablemente demasiados NA en el mapa. Intente agregar myTheme$panel.background$col = 'grey70'después de su myThemelínea y trazarla para ver el resultado. Aparentemente ahora necesito deshacerme de las áreas excesivas de NA alrededor de la imagen.
thiagoveloso
2
¡De nada! Tenga en cuenta que el 0valor es diferente del NAvalor. También tienen diferentes significados. Puede asignar el mismo color a ambos, pero creo que no es apropiado. Si desea tener un ráster de precipitación que se parezca a la cifra que publicó (más datos), una sugerencia puede ser tratar de interpolar sus datos siguiendo un modelo de predicción apropiado.
Guzmán