Изменить существующую палитру R Color Brewer

library(raster); library(rasterVis); library(RColorBrewer)

Я хочу изменить тему "Коричневый зеленый", чтобы средний разрыв (от 140 до 160) был серым. Это возможно?

Вот пример с набором данных вулкана.

breaks <- c(100, 120, 140, 160, 180, 195) # manual breaks
mapTheme <- rasterTheme(region=brewer.pal(6,"BrBG"))
levelplot(volcano, at=breaks, par.settings=mapTheme)

h ttps://stackru.com/images/13af3ba1b2f24856a63209f100c37ab4f29edcc8.png

1 ответ

Решение

Сначала мы можем подготовить цветовую палитру и заменить третью на grey, а затем положить его на region аргумент.

library(raster)
library(rasterVis)
library(RColorBrewer)

breaks <- c(100, 120, 140, 160, 180, 195) # manual breaks
pal <- brewer.pal(6,"BrBG")
pal[3] <- "grey"
mapTheme <- rasterTheme(region = pal)
levelplot(volcano, at=breaks, par.settings=mapTheme)

https://st ackru.com/images/9adb734b69c012e1639673467956cdf875b1a07c.png

Это может быть неуместно, но, вручную определяя разрывы, вы пропускаете части данных в пределах минимума (где вы получаете белые пятна). Ниже приведен способ обойти эту проблему:

#setting breaks
myMat.max <- ceiling(max(volcano))
myMat.min <- floor(min(volcano))
breaks <- round(seq(myMat.min, myMat.max, length.out = 6)) # do not use by = x

# Customising Brewer palette
pal <- brewer.pal(6,"BrBG")
pal[3] <- "grey"
mapTheme <- rasterTheme(region = pal)

#plot
levelplot(volcano, colorkey=list(at=breaks, labels=as.character(breaks)), 
          par.settings=mapTheme, cuts=length(breaks)-2)

Другие вопросы по тегам