установить автоматические уровни цветов в .filled.contour? (кригинг)

Мне трудно автоматически создавать цвета с помощью fill.contour, отображающего график кригинга, избегая указания уровней().

Я могу построить свои результаты и увидеть легенду, но почему мои цвета повторяются? Таким образом, почему интервал 4.5–5.0 имеет тот же цвет, что и интервал 7.0–7.5? и как это исправить?

filled.contour(x = seq(0,1, length.out = nrow(predmat3)),
           y = seq(0,1, length.out = ncol(predmat3)),
           z = predmat3,
           col = brewer.pal(5,"Purples"), nlevels = 5)

введите здесь описание изображения

Довольно длинный воспроизводимый пример, адаптированный из https://rpubs.com/nabilabd/118172 (расчет кригинга по выборка данных мозаики Вороного для точек интерполяции)

library(sp)
library(gstat)
library(RColorBrewer)

# https://rpubs.com/nabilabd/118172
# packages for manipulation & visualization
suppressPackageStartupMessages({
  library(dplyr) # for "glimpse"
  library(ggplot2)
  library(scales) # for "comma"
  library(magrittr)
})

data(meuse)

# create spdf
meuse.spdf<-meuse

# convert to spdf
coordinates(meuse.spdf) <- ~ x + y



# calculate voronoi tesselation - will be needed to create underlying point data
voronoipolygons = function(layer) {
  require(deldir)
  crds = layer@coords
  z = deldir(crds[,1], crds[,2])
  w = tile.list(z)
  polys = vector(mode='list', length=length(w))
  require(sp)
  for (i in seq(along=polys)) {
    pcrds = cbind(w[[i]]$x, w[[i]]$y)
    pcrds = rbind(pcrds, pcrds[1,])
    polys[[i]] = Polygons(list(Polygon(pcrds)), ID=as.character(i))
  }
  SP = SpatialPolygons(polys)
  voronoi = SpatialPolygonsDataFrame(SP, data=data.frame(dummy = seq(length(SP)), row.names=sapply(slot(SP, 'polygons'), 
                                                                                                   function(x) slot(x, 'ID'))))
}
meuse.voro <- voronoipolygons(meuse.spdf)   

# create underlying grid
s.grid <- spsample(meuse.voro, type = "regular", n = 6000)

# calculate kriging
 # create variogram
lzn.vgm <- variogram(log(zinc)~1, meuse.spdf) # calculates sample variogram values 
lzn.fit <- fit.variogram(lzn.vgm, model=vgm(1, "Sph", 900, 1)) # fit model

plot(lzn.vgm, lzn.fit) # plot the sample values, along with the fit model

# calculate kriging
lzn.kriged <- krige(log(zinc) ~ 1, meuse.spdf, s.grid, model=lzn.fit)


# extract the unique x and y locations in the grid
ux<-unique(coordinates(lzn.kriged)[,1])
uy<-unique(coordinates(lzn.kriged)[,2])

# extract the predicted values and format var1.pred into a matrix of gridded values
predmat3 <- matrix(lzn.kriged$var1.pred, length(ux), length(uy))

# display the data???

filled.contour(x = seq(0,1, length.out = nrow(predmat3)),
           y = seq(0,1, length.out = ncol(predmat3)),
           z = predmat3,
           col = brewer.pal(5,"Purples"), nlevels = 5)

person maycca    schedule 12.05.2016    source источник


Ответы (1)


Вам нужно 6 цветов для легенды, но указано только 5, поэтому просто измените на:

filled.contour(x = seq(0,1, length.out = nrow(predmat3)),
               y = seq(0,1, length.out = ncol(predmat3)),
               z = predmat3,
               col = brewer.pal(6,"Purples"), nlevels = 5)

введите здесь описание изображения

person erc    schedule 12.05.2016
comment
О, теперь я понимаю, почему количество nlevels равно -1 (6 - 1 = 5)! Brewer.pal определяет количество цветов, которые мне нужны (6), и выравнивает разрывы/границы/ограничения между ними! :) спасибо, @beetroot - person maycca; 12.05.2016