2016-05-12 14 views
2

Ich habe eine harte Zeit, um Farben automatisch zu erstellen, die filled.contour verwenden, der kriging Diagramm anzeigt und Levels() vermeidet.automatische Farbstufen in .filled.contour setzen? (Kriging)

Ich kann meine Ergebnisse plotten und die Legende sehen, aber warum meine Farben sich wiederholen? Also, warum Intervall 4.5 - 5.0 hat die gleiche Farbe wie die 7.0 - 7.5? und wie kann ich es beheben?

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) 

enter image description here

Ganz lange reproduzierbares Beispiel adaptiert von https://rpubs.com/nabilabd/118172 (berechnet Kriging von Voronoi Abtasten tesselation Daten für Stützpunkte)

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 = [email protected] 
    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) 

Antwort

2

Sie benötigen 6 Farben für die Legende, aber nur 5 angegebenen Ändern Sie einfach zu:

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) 

enter image description here

+1

Oh, ich sehe jetzt, warum die Anzahl der Nlevels -1 (6 - 1 = 5) ist! Brewer.pal definiert die Anzahl der Farben, die ich brauche (6) und levelt die "Pausen/Grenzen/Begrenzungen" zwischen ihnen! :) Danke, @beetroot – maycca