2016-08-30 12 views
0

Ich versuche, die Ergebnisse einer Kriging mit externer Drift, die Messpunkte überlappend, zu plotten. Ich möchte, dass meine Messpunkte mit der gleichen Farbpalette des Rasters und mit einem schwarzen Rand entsprechend dem Messwert gezeichnet werden.R spplot - Plotpunkte über Raster mit der gleichen Farbskala

Ich kann die Punkte mit sp.layout plotten, aber ich kann nicht verstehen, wie man sie entsprechend den Werten mit der gleichen Standardfarbpalette des Rasters einfärbt.

hier ist das, was ich zu tun versuchen:

colbreaks <- seq(from=0, to=5, by=0.1) 
rg <-list("sp.points", g, cex=1.5, pch=19, fill=g$rain, colourkey=TRUE) 
p1 <- spplot(r, at=colbreaks, sp.layout=rg) 

wo g ein SpatialPointsDataFrame ist, wo „regen“ das Wertefeld ist, würde ich für die Farbe verwenden möchten, und r eine SpatialGridDataFrame, die teh Ergebnis enthält der Interpolation.

Im Ergebnis sind die Punkte nicht entsprechend der Rasterpalette eingefärbt.

eine Idee?

PS: Ich muss das Ergebnis der spplot in der Variable p speichern, weil ich es dann in einem 2x2 Grid.arrange Plot mit GridExtra verwenden.

Vielen Dank!

Antwort

0

Wenn jemand mein gleiche Problem auftritt, ist dies, wie ich es gelöst:

Zunächst wähle ich die Farbpalette von spplot verwendet:

colscale <- bpy.colors() 

Dann erstelle ich einen Index, der meine Werte zu den Karten entsprechende Farbe der Farbpalette. Das Ergebnis ist ein Vektor f mit der gleichen Länge meines SpatialPointsDataFrame, der die entsprechenden Farben enthält. Maxrain ist der Maximalwert bis zum Ende der Palette (weiß) verbunden:

ind <- floor(g$rain/maxrain*(length(colscale)-1)+1) 
f <- ind 
f[ind>length(colscale)]<- "#FFFFFF" # White for the exceeding values 
f[is.na(ind)==F & ind<=length(colscale)] <- colscale[ind[is.na(ind)==F & ind<=length(colscale)]] 
f[is.na(f)==T] <- "#444444" # Grey for the NA 

Dann erstelle ich meine Listen für die sp.layout. Der erste Satz von Punkten ist nur die schwarze Kontur zu bekommen

rgb<-list("sp.points", g, cex=1.2, pch=19, col = "black", colourkey=T) 
rg<-list("sp.points", g, cex=1.0, pch=19, cuts=length(g$rain), col = f, colourkey=T) 

Endlich kann ich die beiden Listen in spplot verwenden:

colbreaks <- seq(from=0, to=maxrain, by=0.1)  
p <- spplot(r, at=colbreaks, sp.layout=list(rgb, rg)) 

Hoffe, dass es jemand anderes zu helfen. Lassen Sie mich wissen, wenn Sie einen klügeren und einfacheren Weg finden.

This is the result of the lines above. The raster and the points have the same colour scale.

Verwandte Themen