Jak przypisać kolory do określonych wartości rastrowych za pomocą R.

9

Korzystam z levelplotfunkcji niesamowitego rasterVispakietu, aby stworzyć mapę, której wartości różnią się od zera. Planuję plik rastrowy przy użyciu palety od czerwonej do niebieskiej, ale próbuję przypisać wartości szare do zera na mapie.

W szczególności chcę odtworzyć kolory tej figury:

wprowadź opis zdjęcia tutaj

Zauważ, że tam, gdzie używana jest skala od czerwonej do niebieskiej, ale wartości zerowe zostały zabarwione na szaro.

Obecnie moje mapy wyglądają tak:wprowadź opis zdjęcia tutaj

A to jest kod do jego odtworzenia (plik dostępny na 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)

Jak mogę przypisać kolor szary do wszystkich wartości zerowych na mojej mapie powyżej?

thiagoveloso
źródło

Odpowiedzi:

7

Możesz zdefiniować własną paletę kolorów, łącząc dwie predefiniowane palety kolorów i żądany szary kolor jako: [czerwono-pomarańczowo-żółta paleta] + [zero szary kolor] + [niebieska paleta] . Aby wyrównać wartość zerową z kolorem szarym, należy użyć tej samej liczby kolorów ( n) dla predefiniowanych palet kolorów.

Wypróbuj poniższy komentarz:

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

wątek

Zauważ, że twoja fabuła nie będzie wyglądać jak opublikowany przykład, ponieważ twój raster ma więcej rzadkich danych z wieloma Nas

Guzmán
źródło
Dziękuję za odpowiedź. Zrozumiałem, że moim problemem jest prawdopodobnie zbyt wiele NA na mapie. Spróbuj dodać myTheme$panel.background$col = 'grey70'po myThemelinii i wykreśl ją, aby zobaczyć wynik. Najwyraźniej teraz muszę pozbyć się nadmiernych obszarów NA wokół obrazu.
thiagoveloso
2
Zapraszamy! Zauważ, że 0wartość różni się od NAwartości. Mają też różne znaczenia. Możesz przypisać ten sam kolor do obu, ale myślę, że to nie jest właściwe. Jeśli chcesz mieć raster opadów, który wygląda jak liczba, którą opublikowałeś (więcej danych), jedną z sugestii może być próba interpolacji danych zgodnie z odpowiednim modelem predykcyjnym.
Guzmán