創建的顏色矢量。在這裏,我使用RColorBrewer
調色板'YlOrRd'
(我反過來使它變成紅色>橙色>黃色,因爲顏色與柵格值的順序相關,從最負到最正的順序)和'Blues'
。這些調色板每個僅提供9種顏色,因此我們將調色板傳遞到colorRampPalette
以生成許多插入(插入)的顏色。在這裏,我使用每個調色板生成1000種顏色 - 這對創建平滑的顏色鍵綽綽有餘。
我們希望顏色鍵跨越柵格數據集中範圍從-5到10的值範圍。因此,我們需要對將用於顏色鍵較短臂的顏色向量進行子集劃分(負值,即紅色)。確切地說,我們想要放棄紅色矢量的前500個值,因爲密鑰的<0
部分是>0
部分的一半長度。這給我們留下了500個橙黃色的矢量(我們丟下了最紅的紅色),還有一個1000藍色的矢量。
cols <- c(colorRampPalette(rev(brewer.pal(9, 'YlOrRd')))(1000)[501:1000],
colorRampPalette(brewer.pal(9, 'Blues'))(1000))
劇情光柵與levelplot
,這是一種位比raster
對象經常plot方法更加靈活。爲方便起見,我們首先創建一個下限和上限(z限制)的向量。
zrng <- range(pretty(c(minValue(r), maxValue(r))))
levelplot(r, margin=FALSE, at=seq(zrng[1], zrng[2], diff(zrng)/1000),
col.regions=cols, scales=list(draw=FALSE))
獎金鍛鍊!
要自動化矢量子設置,則可以使用下面的函數:
asym_colours <- function(r, pal1, pal2, n=2000) {
zrng <- range(pretty(c(minValue(r), maxValue(r))))
brks <- do.call(seq, as.list(c(max(abs(zrng)) * c(-1, 1), length.out=2*n)))
c(pal1(n)[(sum(brks < zrng[1]) + 1):n],
pal2(n)[1:(sum(brks < zrng[2] & brks > 0) + 1)])
}
例如:
r <- raster(matrix(runif(100, -0.3, 0.1), 10))
cols <- asym_colours(r, colorRampPalette(rev(brewer.pal(9, 'YlOrRd'))),
colorRampPalette(brewer.pal(9, 'Blues')))
zrng <- range(pretty(c(minValue(r), maxValue(r))))
levelplot(r, margin=FALSE, at=seq(zrng[1], zrng[2], diff(zrng)/1000),
col.regions=cols, scales=list(draw=FALSE))
,或者具有不同的斜坡:
cols <- asym_colours(r, colorRampPalette(rev(brewer.pal(9, 'GnBu'))),
colorRampPalette(brewer.pal(9, 'PuRd')))
zrng <- range(pretty(c(minValue(r), maxValue(r))))
levelplot(r, margin=FALSE, at=seq(zrng[1], zrng[2], diff(zrng)/1000),
col.regions=cols, scales=list(draw=FALSE))
重複的例子,請:http://stackoverflow.com/a/5963610/1412059 – Roland 2015-01-21 10:27:27