Cara menetapkan warna ke nilai raster tertentu menggunakan R

9

Saya menggunakan levelplotfungsi rasterVispaket luar biasa untuk membuat peta yang nilainya berbeda sekitar nol. Saya merencanakan file raster menggunakan palet merah ke biru, tetapi saya mencoba untuk menetapkan nilai abu-abu ke nol di peta.

Secara khusus, saya ingin mereproduksi warna gambar ini:

masukkan deskripsi gambar di sini

Perhatikan bahwa di mana skala merah ke biru digunakan, tetapi nilai nol telah diwarnai dengan abu-abu.

Saat ini, peta saya terlihat seperti ini:masukkan deskripsi gambar di sini

Dan ini adalah kode untuk memperbanyaknya (file tersedia di 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)

Bagaimana saya bisa menetapkan abu-abu ke semua nilai nol di peta saya di atas?

thiagoveloso
sumber

Jawaban:

7

Anda dapat menentukan palet warna Anda sendiri dengan menggabungkan dua palet warna yang telah ditentukan dan warna abu-abu yang Anda inginkan sebagai: [palet kuning oranye merah] + [nol warna abu-abu] + [palet blues] . Untuk mendapatkan nilai nol selaras dengan warna abu-abu Anda harus menggunakan jumlah warna yang sama ( n) untuk palet warna yang telah ditentukan.

Coba kode yang dikomentari di bawah ini:

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

merencanakan

Perhatikan bahwa plot Anda tidak akan terlihat seperti contoh gambar yang Anda poskan karena raster Anda memiliki lebih banyak data yang jarang dengan banyak Nas

Guzmán
sumber
Terima kasih balasannya. Saya menyadari bahwa masalah saya mungkin terlalu banyak NA di peta. Coba tambahkan myTheme$panel.background$col = 'grey70'setelah myThemebaris Anda dan plot untuk melihat hasilnya. Rupanya sekarang saya harus menyingkirkan area NA yang berlebihan di sekitar gambar.
thiagoveloso
2
Sama sama! Perhatikan bahwa 0nilai berbeda dari NAnilai. Mereka juga memiliki arti yang berbeda. Anda dapat menetapkan warna yang sama untuk keduanya, tetapi saya pikir itu tidak sesuai. Jika Anda ingin memiliki raster presipitasi yang terlihat seperti angka yang Anda poskan (lebih banyak data), satu saran mungkin mencoba untuk menginterpolasi data Anda mengikuti model prediksi yang sesuai.
Guzmán