R中不同绘图具有相同色标的色带
Color ramp with the same colour scale across different plots in R
我需要创建一些光栅图形,但要保持颜色渐变比例相同,但我还希望颜色渐变是平滑的渐变。是否可以保留大量颜色(约 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)
在这种情况下,我有一个我想要的色带,但你看不到中断标签
当我减少中断次数时,色带变成了一种颜色
brk=seq(-50,70,length.out=6)
您可能会发现 ggplot2
更容易做到这一点。在下面的代码中,对于每个图,关键是为 low
、mid
和 high
设置相同的颜色值,并在 [=16= 中设置相同的 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
您可以使用 at
来定义您的范围(最小值、最大值、间隔)。较小的间隔将产生更平滑的颜色范围。在这里查看相关问题—— or this post Locking color key in levelplot in r
我需要创建一些光栅图形,但要保持颜色渐变比例相同,但我还希望颜色渐变是平滑的渐变。是否可以保留大量颜色(约 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)
在这种情况下,我有一个我想要的色带,但你看不到中断标签
当我减少中断次数时,色带变成了一种颜色
brk=seq(-50,70,length.out=6)
您可能会发现 ggplot2
更容易做到这一点。在下面的代码中,对于每个图,关键是为 low
、mid
和 high
设置相同的颜色值,并在 [=16= 中设置相同的 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
您可以使用 at
来定义您的范围(最小值、最大值、间隔)。较小的间隔将产生更平滑的颜色范围。在这里查看相关问题——