对值范围使用单一颜色,并在 colorkey levelplot R 上包含不等式符号
Use a single colour for range of values and include inequality symbol on colorkey levelplot R
我有 4 个 rasters
值跨越正负尺度。对于 4 rasters
:
1) 对于范围 +/-20 之外的所有值,我想在 colorkey
的两端只使用一个颜色中断。这是因为我对较小值的栅格内和栅格间可变性更感兴趣。
2) 如何指定 colorkey
的标签,使它们看起来类似于:at=c(<=-20, -10, 0 , 10 , >=20)
。这里最重要的是如何在colorkey
标签中包含不等号
下面显示了可重现的示例和示例代码。该图显示了我使用 levelplot
函数显示的实际数据。
library(raster)
library (colorRamps)
set.seed(100)
ras <- raster(ncol=100, nrow=100)
ras1 <- setValues(ras, (1:ncell(ras))/100 + rnorm(ncell(ras)) - 50)
s=stack(ras1,ras1,ras1,ras1)
color_levels=14 #the number of colors to use
max_abolute_value=max(abs(c(cellStats(s, min), cellStats(s, max)))) #what is the maximum absolute value of raster?
color_sequence=unique(round(seq(-max_abolute_value,max_abolute_value,length.out=color_levels+1),0))
myColorkey <- list(at=color_sequence,space = "bottom", ## where the colors change
labels=list(axis.line = list(col = NA),at=color_sequence,rot=0,cex=0.9,font=6,
fontface=1),height=1,width=1.4)
col1 <- colorRampPalette(c("darkred", "red3","red",
"gray96", "lightskyblue", "royalblue3",
"darkblue"))
levelplot(s,contour=F, layout=c(4, 3), col.regions = col1,colorkey=myColorkey,margin=FALSE,xlab=NULL,ylab=NULL,par.strip.text=list(cex=0))
至于 (i),您可以简单地 reclassify
栅格图层并将所有值设置为小于 -20(或大于 20),例如到 -20.5(或 20.5)。我想这是有道理的,因为无论如何您对更小或更大的值都不感兴趣。至于 (ii),我建议使用 spplot
并按照 ?levelplot
中的详细说明修改 colorkey(来自包 lattice)。请注意,可以使用 Unicode 字符轻松插入所需的标签(例如,greater than or equal to)。
## reclassify data
m_rcl <- matrix(c(-100, -20, -20.5,
20, 100, 20.5),
byrow = TRUE, ncol = 3)
s_rcl <- reclassify(s, m_rcl)
## colors
library(RColorBrewer)
cols <- brewer.pal(6, "RdBu")
cols <- rev(cols)
cols <- colorRampPalette(cols)
## display data
spplot(s_rcl, col.regions = cols(100), at = seq(-21, 21, 1),
colorkey = list(space = "bottom",
labels = list(at = seq(-20, 20, 10),
labels = c("\u2264 -20", 10, 0, 10, "\u2265 20"))))
遵循@fdetsch 的建议这对我有用:
m_rcl <- matrix(c(-375, -100, -100.5,
100, 484, 100.5),
byrow = TRUE, ncol = 3)
s_rcl <- reclassify(s, m_rcl)
levelplot(s_rcl,contour=F,margin=FALSE,xlab=NULL,ylab=NULL,par.strip.text=list(cex=0), scales = list(x=x.scale, y=y.scale),
col.regions = col1, at = seq(-110, 110,20),layout=c(4, 3),index.cond=list(c( 1,2,3,4,5,6,7,8,9,10,11,12)),
colorkey = list(space = "bottom",
labels = list(at = seq(-100, 100, 20), rot=0,cex=0.9,font=6,fontface=1,
labels = c("\u2264 -100", "-80", "-60" , "-40" ,"-20" ,
"0" , "20" , "40" , "60" , "80" , "\u2265 100")),height=1,width=1.4))
非常感谢。
我有 4 个 rasters
值跨越正负尺度。对于 4 rasters
:
1) 对于范围 +/-20 之外的所有值,我想在 colorkey
的两端只使用一个颜色中断。这是因为我对较小值的栅格内和栅格间可变性更感兴趣。
2) 如何指定 colorkey
的标签,使它们看起来类似于:at=c(<=-20, -10, 0 , 10 , >=20)
。这里最重要的是如何在colorkey
标签中包含不等号
下面显示了可重现的示例和示例代码。该图显示了我使用 levelplot
函数显示的实际数据。
library(raster)
library (colorRamps)
set.seed(100)
ras <- raster(ncol=100, nrow=100)
ras1 <- setValues(ras, (1:ncell(ras))/100 + rnorm(ncell(ras)) - 50)
s=stack(ras1,ras1,ras1,ras1)
color_levels=14 #the number of colors to use
max_abolute_value=max(abs(c(cellStats(s, min), cellStats(s, max)))) #what is the maximum absolute value of raster?
color_sequence=unique(round(seq(-max_abolute_value,max_abolute_value,length.out=color_levels+1),0))
myColorkey <- list(at=color_sequence,space = "bottom", ## where the colors change
labels=list(axis.line = list(col = NA),at=color_sequence,rot=0,cex=0.9,font=6,
fontface=1),height=1,width=1.4)
col1 <- colorRampPalette(c("darkred", "red3","red",
"gray96", "lightskyblue", "royalblue3",
"darkblue"))
levelplot(s,contour=F, layout=c(4, 3), col.regions = col1,colorkey=myColorkey,margin=FALSE,xlab=NULL,ylab=NULL,par.strip.text=list(cex=0))
至于 (i),您可以简单地 reclassify
栅格图层并将所有值设置为小于 -20(或大于 20),例如到 -20.5(或 20.5)。我想这是有道理的,因为无论如何您对更小或更大的值都不感兴趣。至于 (ii),我建议使用 spplot
并按照 ?levelplot
中的详细说明修改 colorkey(来自包 lattice)。请注意,可以使用 Unicode 字符轻松插入所需的标签(例如,greater than or equal to)。
## reclassify data
m_rcl <- matrix(c(-100, -20, -20.5,
20, 100, 20.5),
byrow = TRUE, ncol = 3)
s_rcl <- reclassify(s, m_rcl)
## colors
library(RColorBrewer)
cols <- brewer.pal(6, "RdBu")
cols <- rev(cols)
cols <- colorRampPalette(cols)
## display data
spplot(s_rcl, col.regions = cols(100), at = seq(-21, 21, 1),
colorkey = list(space = "bottom",
labels = list(at = seq(-20, 20, 10),
labels = c("\u2264 -20", 10, 0, 10, "\u2265 20"))))
遵循@fdetsch 的建议这对我有用:
m_rcl <- matrix(c(-375, -100, -100.5,
100, 484, 100.5),
byrow = TRUE, ncol = 3)
s_rcl <- reclassify(s, m_rcl)
levelplot(s_rcl,contour=F,margin=FALSE,xlab=NULL,ylab=NULL,par.strip.text=list(cex=0), scales = list(x=x.scale, y=y.scale),
col.regions = col1, at = seq(-110, 110,20),layout=c(4, 3),index.cond=list(c( 1,2,3,4,5,6,7,8,9,10,11,12)),
colorkey = list(space = "bottom",
labels = list(at = seq(-100, 100, 20), rot=0,cex=0.9,font=6,fontface=1,
labels = c("\u2264 -100", "-80", "-60" , "-40" ,"-20" ,
"0" , "20" , "40" , "60" , "80" , "\u2265 100")),height=1,width=1.4))
非常感谢。