So weisen Sie bestimmten Rasterwerten mit R Farben zu


9

Ich benutze die levelplotFunktion des fantastischen rasterVisPakets, um eine Karte zu erstellen, deren Werte um Null herum abweichen. Ich zeichne eine Rasterdatei mit einer Rot-Blau-Palette, versuche jedoch, Nullwerte in der Karte Grau zuzuweisen.

Insbesondere möchte ich die Farben dieser Figur reproduzieren:

Geben Sie hier die Bildbeschreibung ein

Beachten Sie, dass dort, wo eine Rot-Blau-Skala verwendet wird, die Nullwerte jedoch grau gefärbt wurden.

Derzeit sehen meine Karten folgendermaßen aus:Geben Sie hier die Bildbeschreibung ein

Und dies ist der Code, um ihn zu reproduzieren (Datei verfügbar unter 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)

Wie kann ich allen Nullwerten in meiner obigen Karte Grau zuweisen?

Antworten:


7

Sie können Ihre eigene Farbpalette definieren, indem Sie zwei vordefinierte Farbpaletten und Ihre gewünschte Graufarbe wie folgt verketten: [Rot-Orange-Gelb-Palette] + [Null-Grau-Farbe] + [Blau-Palette] . Um den Nullwert an der grauen Farbe auszurichten, müssen Sie nfür die vordefinierten Farbpaletten die gleiche Anzahl von Farben ( ) verwenden.

Versuchen Sie den kommentierten Code unten:

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

Handlung

Beachten Sie, dass Ihr Plot nicht wie das von Ihnen veröffentlichte Beispiel aussieht, da Ihr Raster mit vielen Nas spärlichere Daten enthält


Danke für die Antwort. Mir wurde klar, dass mein Problem wahrscheinlich zu viele NAs auf der Karte sind. Versuchen Sie, myTheme$panel.background$col = 'grey70'nach Ihrer myThemeLinie hinzuzufügen , und zeichnen Sie sie, um das Ergebnis zu sehen. Anscheinend muss ich jetzt die übermäßigen NA-Bereiche um das Bild herum entfernen.
Thiagoveloso

2
Bitte schön! Beachten Sie, dass sich der 0Wert vom NAWert unterscheidet. Sie haben auch unterschiedliche Bedeutungen. Sie können beiden die gleiche Farbe zuweisen, aber ich denke, das ist nicht angemessen. Wenn Sie ein Niederschlagsraster haben möchten, das der von Ihnen veröffentlichten Zahl ähnelt (weitere Daten), könnte ein Vorschlag versuchen, Ihre Daten nach einem geeigneten Vorhersagemodell zu interpolieren.
Guzmán
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.