Levelplot color key - range and extremes

匿名 (未验证) 提交于 2019-12-03 07:50:05

问题:

Is it possible in R to create a color key like the one below? (this one comes from the software Grid Analysis and Display System - Grads).

There are two features that I can't reproduce in R:

  1. The sequence is non linear however it is displayed as if
  2. Values bigger than 200 are grey / Values smaller than 0 are white

I'm using levelplot from rastervis that plots rasters using the 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) 

The result:

As you can see, both values smaller than 0 and bigger than 200 are white, I've no idea how to set values bigger than or smaller than a certain value to appear as a specific color. Morover, how can I make the space between consecutive thick marks in the color key to have the same size although the intervals are not the same?

回答1:

This is a workaround for equally sized intervals for non linear sequences:

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) 

This could be a solution for values smaller 0 and greater than 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) 

Your colors are not progressing from light to dark. You can use the RColorBrewer package to fix this.

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")) 



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!