2012-10-13 6 views
7

Ho un gruppo di dati che ho tracciato a livello di contea, without borders. Mi piacerebbe aggiungere dei limiti di stato. Ho uno shapefile di stato (poligoni), ma non è possibile aggiungere spplot in cima alla mappa precedente. C'è un modo per farlo senza riscrivere la funzione del pannello per prendere due SPDF (che sembra abbastanza specializzato per quello che probabilmente è un problema che hanno gli altri)?Overplotting di due SpatialPolygonsDataFrames con spplot

Ecco un esempio riproducibile:

library(sp) 
Srs1 = Polygons(list(Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))), "s1") 
Srs2 = Polygons(list(Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))), "s2") 

county <- SpatialPolygonsDataFrame(SpatialPolygons(list(Srs1,Srs2)), 
            data.frame(z=1:2, row.names=c("s1","s2"))) 

SrsA <- Polygons(list(Polygon(cbind(c(3,5,5,1,3),c(3,4,6,5,3)))),"sA") 
state <- SpatialPolygonsDataFrame(SpatialPolygons(list(SrsA)), 
            data.frame(z=1,row.names="sA")) 

spplot(county, zcol="z",col=NA) 
spplot(state, add=TRUE) # Note the add=TRUE does nothing here, but that's the spirit of what I want to accomplish 
+0

mi basta usare la grafica di base: plot (foo, col = ...) e quindi aggiungi = VERO funziona e puoi controllare meglio i colori. I colori spplot di default non sono buoni per i poligoni (il bianco su bianco non è mai una buona idea). – Spacedman

+0

@Spacedman Ho usato 'col.regions = gray (...)'. Immagino che il punto sia preso e passerò alla grafica di base o ggplot e riserverò il reticolo per quando ho bisogno di visualizzazioni trellised esplorative. Significa molto più 'cut'ting e' legend'ing, che cerco di evitare dove possibile. –

risposta

10

Per overplot utilizzando la funzione spplot, è possibile utilizzare l'argomento sp.layout. Ad esempio, creare elenchi degli elementi di layout appropriati, come

spCounty <- list("sp.polygons", county, col = NA) 
spState <- list("sp.polygons", state) 

Poi trama, passando gli elementi della lista di cui sopra come un elenco al sp.layout argomento:

# spplot(county, zcol = "z", col = NA, sp.layout = list(spCounty, spState)) 
# actually, you only need to pass the second layout item to sp.layout 
spplot(county, zcol = "z", col = NA, sp.layout = spState) 

x e limiti y non potrebbe sii corretto se i due dataset spaziali non si sovrappongono completamente. È possibile correggere questo, se necessario, estraendo i limiti appropriati dal bbox(obj)

Per esempio,

theMin <- pmin(bbox(county)[,1], bbox(state)[,1]) 
theMax <- pmax(bbox(county)[,2], bbox(state)[,2]) 

spplot(county, zcol = "z", col = NA, sp.layout = spState, 
    ylim = c(theMin[2], theMax[2]), xlim = c(theMin[1], theMax[1])) 

enter image description here

Problemi correlati