创建的颜色矢量。在这里,我使用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