在R中跨不同图表使用相同颜色刻度的颜色斑图

3

我需要创建一些光栅图,但要保持颜色坡度比例相同,同时我也希望颜色坡度是平滑的渐变。是否可能保持大量颜色(~100)以获得平滑的颜色坡度,并且同时具有合理数量的断点,以便易读?

library(raster)
library(colorRamps)

r1<- raster(ncol=56, nrow=26)
r1[] <- runif(n=56*26,min=-20,max=15)

r2<- raster(ncol=56, nrow=26)
r2[] <- runif(n=56*26,min=-14,max=68)


brk=seq(-50,70,length.out=100)
col=matlab.like(100)

plot(r1, breaks=brk, col=col)
plot(r2, breaks=brk, col=col)

在这种情况下,我有一个想要的颜色图例,但你无法阅读断点标签。 enter image description here 当我减少断点数量时,颜色图例变成了同一种颜色。
brk=seq(-50,70,length.out=6)

enter image description here

2个回答

4

你可能会发现使用 ggplot2 更容易。在下面的代码中,关键是对于每个图形,设置相同的颜色值 lowmidhigh,并在 scale_fill_gradient2 中设置相同的 limits。这样可以确保在每个图形中相同的数据值被映射到相同的颜色。例如:

library(rasterVis)
library(ggplot2)

# Reproducible rasters
set.seed(4598)
r1<- raster(ncol=56, nrow=26)
r1[] <- runif(n=56*26,min=-20,max=15)

r2<- raster(ncol=56, nrow=26)
r2[] <- runif(n=56*26,min=-14,max=68)

# Get range of data values across the two rasters
rng = range(c(getValues(r1), getValues(r2)))

gplot(r1) + 
  geom_tile(aes(fill=value)) +
  ggtitle("r1") +
  scale_fill_gradient2(low="red", mid="green", high="blue", 
                       midpoint=mean(rng),    # Value that gets the middle color (default is zero)
                       breaks=seq(-100,100,10),  # Set whatever breaks you want
                       limits=c(floor(rng[1]), ceiling(rng[2])))  # Set the same limits for each plot

gplot(r2) + 
  geom_tile(aes(fill=value)) +
  ggtitle("r2") +
  scale_fill_gradient2(low="red", mid="green", high="blue", 
                       midpoint=mean(rng),    # Value that gets the middle color (default is zero)
                       breaks=seq(-100,100,10),  # Set whatever breaks you want
                       limits=c(floor(rng[1]), ceiling(rng[2])))  # Set the same limits for each plot

enter image description here


3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接