2012-04-04 16 views
8

Tengo 3 archivos shp que representan la casa, la habitación y las camas de una casa, respectivamente. Necesito trazarlos en un gráfico usando R para que se superpongan entre sí. Sé que en la función plot, puedo usar line para trazar nuevas líneas en la parte superior de la gráfica existente, ¿hay algo equivalente en spplot? Gracias.traza un archivo shp múltiple en un gráfico usando spplot en R

+0

¿Qué aspecto de spplot que no se puede hacer con la trama base es necesario? Con los objetos sp solo trazas el primero, luego traza con add = TRUE para superponer los otros. ¿Por qué llevar spplot a la mezcla? – Spacedman

Respuesta

0

Usted puede utilizar el argumento sp.layout en spplot. Alternativamente, puedes usar ggplot2. Un código de ejemplo (no probado):

library(ggplot2) 
shp1_data.frame = fortify(shp1) 
shp1_data.frame$id = "shp1" 
shp2_data.frame = fortify(shp2) 
shp2_data.frame$id = "shp2" 
shp = rbind(shp1_data.frame, shp2_data.frame) 

ggplot(aes(x = x, y = y, group = group, col = id), data = shp) + geom_path() 

En ggplot2, columnas en los datos están vinculados a escalas gráficas en la trama. En este caso x es la coordenada x, y es la coordenada y, group es una columna en el data.frame shp que especifica a qué polígono pertenece un punto, y col es el color del polígono. La geometría que utilicé es geom_path, que dibuja una serie de líneas basadas en el polígono input data.frame. Una alternativa es usar geom_poly, que también es compatible con llenar el polígono.

17

Aquí es un enfoque, utilizando la función ingeniosa layer() del paquete latticeExtra:

# (1) Load required libraries 
library(sp) 
library(rgeos)  # For its readWKT() function 
library(latticeExtra) # For layer() 

# (2) Prepare some example data 
sp1 = readWKT("POLYGON((0 0,1 0,1 1,0 1,0 0))") 
sp2 = readWKT("POLYGON((0 1,0.5 1.5,1 1,0 1))") 
sp3 = readWKT("POLYGON((0.5 0,0.5 0.5,0.75 0.5,0.75 0, 0.5 0))") 

# spplot provides "Plot methods for spatial data with attributes", 
# so at least the first object plotted needs a (dummy) data.frame attached to it. 
spdf1 <- SpatialPolygonsDataFrame(sp1, data=data.frame(1), match.ID=1) 

# (3) Plot several layers in a single panel 
spplot(spdf1, xlim=c(-0.5, 2), ylim=c(-0.5, 2), 
     col.regions="grey90", colorkey=FALSE) + 
layer(sp.polygons(sp2, fill="saddlebrown")) + 
layer(sp.polygons(sp3, fill="yellow")) 

enter image description here

Alternativamente, se puede lograr el mismo resultado a través de sp.layout= argumento spplot() 's. (Especificación de first=FALSE asegura que el 'techo' y 'puerta' se trazarán después de/por encima del cuadrado gris dado como primer argumento spplot() 's.)

spplot(spdf1, xlim=c(-0.5, 2), ylim=c(-0.5, 2), 
     col.regions="grey90", colorkey=FALSE, 
     sp.layout = list(list(sp2, fill="saddlebrown", first=FALSE), 
         list(sp3, fill="yellow", first=FALSE))) 
Cuestiones relacionadas