如何缩放光栅图例以使图例标签间距相等但值不规则?
## 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))
)
答案 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)
我建议使用ggplot2
,因为它允许对色阶进行大量控制(请参阅the online manual),因为可以在此处找到许多问题和答案。
此外,在scale_fill_gradientn
中,values
参数在某些情况下可能很有趣 - 在您的情况下,我不太确定它是否满足您的需求,但值得注意的是,此功能存在。