R中的比例和颜色栅格图例

时间:2018-03-12 18:15:09

标签: r raster r-raster

如何缩放光栅图例以使图例标签间距相等但值不规则?

## Generate Random Raster
rast <- raster( matrix(
    sample(c(0,10),9, replace=T) + runif(9),
    nrow=3, ncol=3) )
rast[4] <- NA

## legend parameters
zlim  <- c(0,15)
zlabs <- c(0,.1,.25,.5,1, 2.5, 5,10, 15)
zat <- seq(length(zlabs))

## Colors
greycols <- grey(seq(1, 0, length=length(zlabs)+1))

## Plot
raster::plot( rast,
    zlim=zlim,
    breaks=zlabs,
    lab.breaks=zat,
    col=greycols
   # axis.args=list(
   #     at=c(0,zat),
   #     labels=c("NA", zlabs))
)

1 个答案:

答案 0 :(得分:1)

如果我理解你想要的是什么,解决方案可能是为标签存储光栅的旧值,然后根据您对绘图的需要更改实际值(以便颜色标度和实际值是匹配的,而标签是你喜欢的。)

为了清晰起见,我只是使用了另一个例子和其他颜色。在您的情况下,数据转换只是他们rank,因为您需要等距间隔:

library(raster)
library(scales)
library(ggplot2)

r = raster(matrix(c(0.75, 0.1, 1.05, 9.8, 9, 1), nrow=2, byrow=T))
zlim = c(0,10)
mycols = c("blue", "red", "green", "magenta", "cyan", "black")
# Convert to DF for ggplot
df = data.frame(rasterToPoints(r))
# Transform the data (and rescale to occupy the full zlim space)
df$layer = rescale(rank(r[]), zlim) 
# Plot the "wrong" data, but label them according to the original ones
ggplot() + geom_raster(data=df, aes(y=y, x=x, fill=layer)) +
  scale_fill_gradientn(colours = mycols,
                       breaks = df$layer, 
                       labels = r[], 
                       limits = zlim)

enter image description here

我建议使用ggplot2,因为它允许对色阶进行大量控制(请参阅the online manual),因为可以在此处找到许多问题和答案。 此外,在scale_fill_gradientn中,values参数在某些情况下可能很有趣 - 在您的情况下,我不太确定它是否满足您的需求,但值得注意的是,此功能存在。