绘制光栅堆栈时使 R 中的颜色条变暗?
Darkening a color bar in R when plotting a raster stack?
我有一个 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
最小值和最大值,我将不胜感激。 (其次,我希望色标从红白色变为蓝色)
这是一个使用 rasterVis
和 ggplot2
来获得所需色标的解决方案。 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)
由 reprex package (v0.3.0)
于 2020 年 3 月 28 日创建
希望对您有所帮助!
您的色标(-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-03-28 创建
希望这可以澄清事情!
我有一个 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
最小值和最大值,我将不胜感激。 (其次,我希望色标从红白色变为蓝色)
这是一个使用 rasterVis
和 ggplot2
来获得所需色标的解决方案。 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)
由 reprex package (v0.3.0)
于 2020 年 3 月 28 日创建希望对您有所帮助!
您的色标(-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))
希望这可以澄清事情!