2012-04-04 26 views
8

Tôi có 3 tệp shp đại diện cho ngôi nhà, phòng và giường của một ngôi nhà tương ứng. Tôi cần phải vẽ chúng trên một đồ thị bằng cách sử dụng R để tất cả chúng chồng lên nhau. Tôi biết rằng trong hàm plot, tôi có thể sử dụng line để vẽ đường mới trên đầu cốt truyện hiện có, có bất kỳ điều gì tương đương trong spplot không? Cảm ơn.lô nhiều tệp shp trên biểu đồ sử dụng spplot trong R

+0

Khía cạnh nào của spplot mà bạn không thể làm với cốt truyện cơ sở bạn cần? Với các đối tượng sp bạn chỉ vẽ ô đầu tiên, sau đó vẽ đồ thị bằng add = TRUE để phủ lên các đối tượng khác. Tại sao mang spplot vào hỗn hợp? – Spacedman

Trả lời

0

Bạn có thể sử dụng đối số sp.layout trong spplot. Ngoài ra, bạn có thể sử dụng ggplot2. Một số mã ví dụ (chưa được kiểm tra):

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() 

ggplot2, các cột trong dữ liệu được liên kết với tỷ lệ đồ họa trong ô. Trong trường hợp này x là tọa độ x, y là toạ độ y, group là một cột trong data.frame shp chỉ định đa giác nào thuộc về điểm và col là màu của đa giác. Hình tôi đã sử dụng là geom_path, vẽ một chuỗi các dòng dựa trên dữ liệu đầu vào đa giác.frame. Cách khác là sử dụng geom_poly, cũng hỗ trợ điền vào đa giác.

17

Dưới đây là một cách tiếp cận, sử dụng tiện lợi layer() chức năng từ gói 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

Ngoài ra, bạn có thể đạt được kết quả tương tự qua sp.layout= luận spplot() 's. (Chỉ định first=FALSE đảm bảo rằng 'mái nhà' và 'cửa' sẽ được vẽ sau khi/phía trên vuông màu xám được cho là đối số đầu tiên 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))) 
Các vấn đề liên quan