Изменить существующую палитру 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)