Як призначити кольори певним значенням растру за допомогою R


9

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

Зокрема, я хочу відтворити кольори цієї фігури:

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

Зауважте, що там, де використовується червона до синя шкала, але нульові значення пофарбовані в сірий колір.

Наразі мої карти виглядають так:введіть тут опис зображення

І це код для його відтворення (файл доступний за адресою https://www.dropbox.com/s/cypfdu1eaz2fuok/r.an year.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)

Як я можу призначити сірий всім нульовим значенням на моїй карті вище?

Відповіді:


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рядка та побудувати його, щоб побачити результат. Мабуть, зараз мені потрібно позбутися надмірних ділянок НС навколо зображення.
thiagoveloso

2
Будь ласка! Зауважте, що 0значення відрізняється від NAзначення. Також вони мають різні значення. Ви можете призначити один і той же колір обом, але я вважаю, що це не підходить. Якщо ви хочете мати растрові опади, схожі на фігуру, яку ви опублікували (більше даних), одна пропозиція, можливо, намагається інтерполювати ваші дані відповідно до відповідної моделі прогнозування.
Гузман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.