Как назначить цвета для определенных значений растра, используя R

9

Я использую levelplotфункцию удивительного rasterVisпакета, чтобы создать карту, значения которой расходятся около нуля. Я строю растровый файл, используя красную палитру синего цвета, но я пытаюсь присвоить серым нулевые значения на карте.

В частности, я хочу воспроизвести цвета этой фигуры:

введите описание изображения здесь

Обратите внимание, что там, где используется шкала от красного до синего, но нулевые значения окрашены в серый цвет.

В настоящее время мои карты выглядят так:введите описание изображения здесь

И это код для его воспроизведения (файл доступен по адресу 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)

Как я могу назначить серый для всех нулевых значений в моей карте выше?

thiagoveloso
источник

Ответы:

7

Вы можете определить свою собственную цветовую палитру, объединив две предопределенные цветовые палитры и желаемый серый цвет как: [красно-оранжево-желтая палитра] + [нулевой серый цвет] + [голубая палитра] . Чтобы получить нулевое значение, выровненное по серому цвету, вы должны использовать то же количество цветов ( 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})))

сюжет

Обратите внимание, что ваш график не будет похож на пример рисунка, который вы разместили, потому что у вашего растра больше разреженных данных со многими Nas

Гусман
источник
Спасибо за ответ. Я понял, что моя проблема, вероятно, слишком много АН на карте. Попробуйте добавить myTheme$panel.background$col = 'grey70'после вашей myThemeлинии и построить его, чтобы увидеть результат. По-видимому, теперь мне нужно избавиться от лишних областей NA вокруг изображения.
thiagoveloso
2
Добро пожаловать! Обратите внимание, что 0значение отличается от NAзначения. Также они имеют разные значения. Вы можете назначить один и тот же цвет для обоих, но я думаю, что это не подходит. Если вы хотите, чтобы растр осадков был похож на опубликованную вами цифру (больше данных), возможно, вы попытаетесь интерполировать ваши данные в соответствии с подходящей моделью прогнозирования.
Гусман