【问题标题】:Levelplot color key - range and extremesLevelplot 颜色键 - 范围和极值
【发布时间】:2022-04-29 21:11:40
【问题描述】:

是否可以在 R 中创建如下所示的颜色键? (这个来自软件Grid Analysis and Display System - Grads)。

有两个功能我无法在 R 中重现:

  1. 序列是非线性的,但它显示为好像
  2. 大于 200 的值为灰色/小于 0 的值为白色

我正在使用 rastervis 的 levelplot,它使用 lattice levelplot 绘制栅格:

require(raster)
require(rasterVis)

set.seed(200)

X = seq(-40,0,by=1)
Y = seq(-60,-40,by=1)
grid = expand.grid(list(X=X,Y=Y))
Z = rnorm(nrow(grid),mean=10,sd=100)

data = data.frame(grid,Z)
r = rasterFromXYZ(data)
mapTheme <- rasterTheme(region=c('#EEF7FA','#D6F8F7',"#BEDAFF",'#5DA4FF',"#0000FF","#D4F9E2","#00FF7F","#008000","#FFFF00","#FFD27F", "#FFB732"    ,"#EE7600",
                                 "#D53E4F","#FF6A6A"))  
my.at = c(0,1,5,10,15,20,25,30,40,50,75,100,150,200)
myColorkey <- list(at=my.at,
                   space="bottom",
                   labels=list(at=my.at))
p=levelplot(r, par.settings=mapTheme,at = my.at, colorkey=myColorkey,margin=F)
print(p)

结果:

如您所见,小于 0 和大于 200 的值都是白色的,我不知道如何将大于或小于某个值的值设置为特定颜色。 Morover,如何让颜色键中连续的粗标记之间的间隔大小相同,尽管间隔不一样?

【问题讨论】:

    标签: r lattice levelplot rastervis


    【解决方案1】:

    这是非线性序列等大小间隔的解决方法:

    library(raster)
    library(rasterVis)
    
    set.seed(200)
    X = seq(-40,0,by=1)
    Y = seq(-60,-40,by=1)
    grid = expand.grid(list(X=X,Y=Y))
    Z = rnorm(nrow(grid),mean=10,sd=100)
    
    data = data.frame(grid,Z)
    r = rasterFromXYZ(data)
    mapTheme <- rasterTheme(region=c('#EEF7FA','#D6F8F7',"#BEDAFF",'#5DA4FF',"#0000FF","#D4F9E2","#00FF7F",
                                     "#008000","#FFFF00","#FFD27F", "#FFB732" ,"#EE7600", "#D53E4F","#FF6A6A"))  
    
    my.at=c(0,1,5,10,15,20,25,30,40,50,75,100,150,200)
    my.brks=seq(0, 200, by=15)
    
    myColorkey <- list(at=my.brks, labels=list(at=my.brks, labels=my.at), space="bottom")
    p=levelplot(r, par.settings=mapTheme, at=my.at, colorkey=myColorkey, margin=F)
    print(p)
    

    这可能是值小于 0 且大于 200 的解决方案:

    library(raster)
    library(rasterVis)
    
    set.seed(200)
    X = seq(-40,0,by=1)
    Y = seq(-60,-40,by=1)
    grid = expand.grid(list(X=X,Y=Y))
    Z = rnorm(nrow(grid),mean=10,sd=100)
    
    data = data.frame(grid,Z)
    r = rasterFromXYZ(data)
    mapTheme <- rasterTheme(region=c('white','#EEF7FA','#D6F8F7',"#BEDAFF",'#5DA4FF',"#0000FF","#D4F9E2","#00FF7F",
                                     "#008000","#FFFF00","#FFD27F", "#FFB732" ,"#EE7600", "#D53E4F","#FF6A6A", "gray"))  
    max(values(r))
    min(values(r))
    
    my.at=c(min(values(r)), 0,1,5,10,15,20,25,30,40,50,75,100,150,200, max(values(r)))
    my.brks=seq(0, 200, by=13)
    
    myColorkey <- list(at=my.brks, labels=list(at=my.brks, labels=c(-276,0,1,5,10,15,20,25,30,40,50,75,100,150,200, 388)), space="bottom")
    p=levelplot(r, par.settings=mapTheme, at=my.at, colorkey=myColorkey, margin=F)
    print(p)
    

    你的颜色没有从浅到深。您可以使用 RColorBrewer 包来解决此问题。

    library(RColorBrewer)
    reds = brewer.pal(5, "YlOrRd")
    greens = brewer.pal(3, "Greens")
    blues = brewer.pal(5, "Blues")
    mapTheme <- rasterTheme(region=c('white', blues, greens, reds, "gray"))
    

    【讨论】:

    • 非常感谢,这正是我想要的。我非常感谢颜色建议!
    【解决方案2】:

    这是一个非常有用的解决方法。虽然没有解决问题 1,但我发现对问题 2 有用的东西(为低于/高于颜色条范围限制的值添加三角形)可以通过添加以下内容来实现:

    library(s2dverification)
    data_array <- array(Z, dim = c(length(X), length(Y)))
    PlotEquiMap(data_array, X, Y,bar_limits=c(0,200),col_inf='white',col_sup='gray')
    

    raster with colorbar

    【讨论】:

      【解决方案3】:

      另一种对 lattice 进行更新的解决方案:

      library(raster)
      library(rasterVis)
      
      set.seed(200)
      X = seq(-40,0,by=1)
      Y = seq(-60,-40,by=1)
      grid = expand.grid(list(X=X,Y=Y))
      Z = rnorm(nrow(grid),mean=10,sd=100)
      data = data.frame(grid,Z)
      r = rasterFromXYZ(data)
      
      levelplot(r, margin=F, at=c(-Inf, seq(0, 200, 20), Inf),
                colorkey = list(tri.lower = TRUE, tri.upper = TRUE))
      

      只要将“-Inf”和“Inf”添加到 at 定义中,就会激活向颜色条添加三角形的选项。

      【讨论】:

        猜你喜欢
        • 2014-03-05
        • 1970-01-01
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-15
        • 2015-06-15
        • 1970-01-01
        相关资源
        最近更新 更多