Затемнение цветовой полосы в R при построении стека растров? - PullRequest
0 голосов
/ 28 марта 2020

У меня есть растровый стек, который я пытаюсь построить в R с помощью spplot:

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

Однако при построении пространственная карта показывает очень светлые цвета, которые визуально не легко увидеть. Я хотел бы сделать цветовую шкалу, которая будет намного темнее и визуально видимой.

colorscales

Воспроизводимый растр:

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 min и max. (Во-вторых, я бы хотел, чтобы шкала цветов до go от красно-белого до синего)

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Ваша цветовая шкала (от -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))

Создано в 2020-03-28 пакетом представ. (v0.3.0)

Надеюсь, что это может прояснить вещи!

0 голосов
/ 28 марта 2020

Вот решение, которое использует 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)

изображение графика здесь: https://i.imgur.com/u50wPkK.png

Создано в 2020-03-28 пакетом Представление (v0.3.0)

Надеюсь, что поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...