【问题标题】:Darkening a color bar in R when plotting a raster stack?绘制栅格堆栈时使R中的颜色条变暗?
【发布时间】:2020-03-28 08:43:25
【问题描述】:

我有一个 rasterstack,我试图通过 spplot 在 R 中绘制它:

rasterstack
class      : RasterStack 
dimensions : 2803, 5303, 14864309, 3  (nrow, ncol, ncell, nlayers)
resolution : 0.008333333, 0.008333333  (x, y)
extent     : 60.85, 105.0417, 15.95833, 39.31667  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
names      :   layer.1,   layer.2,   layer.3 
min values : -1.819715, -1.800774, -1.835778 
max values :    6.5533,    6.5533,    6.5533 

我想要一个从红色到蓝色的色阶,中间是白色。我通过这段代码实现了色阶:

devtools::source_gist('306e4b7e69c87b1826db')
plot2<-diverge0(rasterstack, ramp='RdBu')

但是,当绘制空间图时,显示的颜色非常浅,在视觉上不容易看到。 我想制作一个更暗且视觉可见的色阶。

可重现的栅格:

library(raster)
r1 <- r2 <- r3 <- raster(nrow=10, ncol=10)
values(r1) <- runif(ncell(r1))
values(r2) <- runif(ncell(r2))
values(r3) <- runif(ncell(r3))
s <- stack(r1, r2, r3)

请注意,可重现的栅格没有相同的栅格堆栈最小值和最大值,如果有人可以根据我的实际 rasterstack 最小值和最大值来指导,我将不胜感激。 (其次,我希望色阶从红白到蓝)

【问题讨论】:

    标签: r colors raster tiff colorbar


    【解决方案1】:

    您的色阶(-1 到 7)实际上是正确的,例如-1 的暗度对应于 +1 的暗度。这是不同规模的一个重要方面。如果要在中心保持零,则必须将其扩展为常见的绝对极值(在您的情况下为 -7 到 7)。 经过一番挖掘,我发现了这个更优雅的解决方案。零现在位于刻度的中心。

    library(raster)
    #> Lade nötiges Paket: sp
    r1 <- r2 <- r3 <- raster(nrow=10, ncol=10)
    values(r1) <- runif(ncell(r1),-5,5)        # I adjusted your stack min max to [-1;7]
    values(r2) <- runif(ncell(r2),-1,4)
    values(r3) <- runif(ncell(r3),0,7)
    s <- stack(r1, r2, r3)
    print(cellStats(s, range))
    #>        layer.1    layer.2   layer.3
    #> [1,] -4.999763 -0.9014062 0.2718563
    #> [2,]  4.891400  3.9860373 6.9711417
    
    cols <- c('#ff0000', '#ffffff', '#002bff')   # red, white, blue
    c.pal <- colorRampPalette(cols)              # interpolate between the 3 colors
    
    s.max <- max(abs(cellStats(s,stat = unique)))  # get absolute max of stack
    
    # make 100 even breaks with 0 in center
    library(lattice)
    breaks <- do.breaks(c(-s.max,s.max), 100)
    
    spplot(s, col.regions = c.pal, at = breaks,
           colorkey = list(col = c.pal, at = breaks))
    

    reprex package (v0.3.0) 于 2020 年 3 月 28 日创建

    希望这可以澄清事情!

    【讨论】:

    • 我在问题中所述的实际光栅范围从 -1 到大约 7。如何设置色阶以将白色值显示为零?
    【解决方案2】:

    这是一个使用rasterVisggplot2 获得所需色阶的解决方案。 scale_fill_gradientn()facet_wrap() 请注意您的比例适合堆栈中的所有栅格。

    library(raster)
    #> Lade nötiges Paket: sp
    r1 <- r2 <- r3 <- raster(nrow=10, ncol=10)
    values(r1) <- runif(ncell(r1),-.2,.2)        # I adjusted your stack min max
    values(r2) <- runif(ncell(r2),-.3,.3)
    values(r3) <- runif(ncell(r3),-.5,.5)
    s <- stack(r1, r2, r3)
    
    library(ggplot2)
    library(rasterVis)
    #> Lade nötiges Paket: lattice
    #> Lade nötiges Paket: latticeExtra
    #> Lade nötiges Paket: RColorBrewer
    #> 
    #> Attache Paket: 'latticeExtra'
    #> The following object is masked from 'package:ggplot2':
    #> 
    #>     layer
    cols <- c('#ff0000', '#ffffff', '#002bff')   # red, white, blue
    gplot(s) + 
      geom_tile(aes(fill=value)) +
      scale_fill_gradientn(colors = cols, aesthetics = "fill") +
      coord_equal() +
      facet_wrap(~variable)
    

    情节图在这里:https://i.imgur.com/u50wPkK.png

    reprex package (v0.3.0) 于 2020 年 3 月 28 日创建

    希望有帮助!

    【讨论】:

    • 感谢您的回复,我正在通过 spplot 绘制栅格堆栈,在 spplot 中绘制时如何导入此配色方案?
    • 我在问题中所述的实际光栅范围从 -1 到大约 7。如何设置色阶以将白色值显示为零?
    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多