Comment attribuer des couleurs à des valeurs raster spécifiques à l'aide de R

9

J'utilise la levelplotfonction du rasterVispackage génial pour créer une carte dont les valeurs divergent autour de zéro. Je trace un fichier raster à l'aide d'une palette rouge à bleu, mais j'essaie d'attribuer des valeurs de gris à zéro dans la carte.

Plus précisément, je veux reproduire les couleurs de cette figure:

entrez la description de l'image ici

Notez que lorsqu'une échelle de rouge à bleu est utilisée, mais que les valeurs nulles ont été colorées en gris.

Actuellement, mes cartes ressemblent à ceci:entrez la description de l'image ici

Et voici le code pour le reproduire (fichier disponible sur 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)

Comment puis-je attribuer du gris à toutes les valeurs nulles dans ma carte ci-dessus?

thiagoveloso
la source

Réponses:

7

Vous pouvez définir votre propre palette de couleurs en concaténant deux palettes de couleurs prédéfinies et la couleur grise de votre choix: [palette jaune orange rouge] + [couleur gris zéro] + [palette bleus] . Pour aligner la valeur zéro sur la couleur grise, vous devez utiliser le même nombre de couleurs ( n) pour les palettes de couleurs prédéfinies.

Essayez le code commenté ci-dessous:

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

terrain

Notez que votre tracé ne ressemblera pas à l'exemple de figure que vous avez publié, car votre raster contient plus de données clairsemées avec de nombreux Nas

Guzmán
la source
Merci pour la réponse. J'ai réalisé que mon problème est probablement trop de NA sur la carte. Essayez d'ajouter myTheme$panel.background$col = 'grey70'après votre myThemeligne et tracez-la pour voir le résultat. Apparemment, je dois maintenant me débarrasser des zones NA excessives autour de l'image.
thiagoveloso
2
Je vous en prie! Notez que la 0valeur est différente de la NAvaleur. Ils ont également des significations différentes. Vous pouvez attribuer la même couleur aux deux, mais je pense que ce n'est pas approprié. Si vous souhaitez avoir un raster de précipitations qui ressemble à la figure que vous avez publiée (plus de données), une suggestion peut-être d'essayer d'interpoler vos données en suivant un modèle de prédiction approprié.
Guzmán