2012-10-13 11 views
7

Tôi có một loạt dữ liệu mà tôi đã vẽ ở cấp hạt, without borders. Tôi muốn thêm vào ranh giới tiểu bang. Tôi có một shapefile trạng thái (đa giác), nhưng spplot dường như không có cách nào để thêm vào đầu bản đồ trước đó. Có cách nào để làm điều này mà không cần viết lại chức năng bảng điều khiển để có hai SPDF (mà có vẻ khá chuyên biệt cho những gì có thể là một vấn đề người khác có)?Ghi đè hai SpatialPolygonsDataFrames bằng spplot

Dưới đây là một ví dụ tái sản xuất:

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

tôi chỉ cần sử dụng đồ họa cơ sở: cốt truyện (foo, col = ...) và sau đó thêm = TRUE hoạt động và bạn có thể kiểm soát màu sắc tốt hơn. Màu spplot mặc định không tốt cho đa giác (trắng-trên-trắng không bao giờ là ý hay). – Spacedman

+0

@Spacedman Tôi đã sử dụng 'col.regions = gray (...)'. Tôi đoán điểm được thực hiện và tôi sẽ di chuyển đến đồ họa cơ sở hoặc ggplot và lưới dự trữ cho khi tôi cần trực quan thám hiểm trellised. Chỉ có nghĩa là nhiều hơn 'cut'ting và' legend'ing, mà tôi cố gắng tránh khi có thể. –

Trả lời

10

Để overplot sử dụng spplot chức năng, bạn có thể sử dụng đối số sp.layout. Ví dụ, tạo danh sách các mục bố trí thích hợp, chẳng hạn như

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

Sau đó, cốt truyện, đi qua các mục được liệt kê ở trên như một danh sách với sp.layout luận:

# 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 và giới hạn y có thể không đúng nếu hai data.fram không gian chồng lên nhau hoàn toàn. Bạn có thể sửa này nếu cần thiết bằng cách chiết xuất các giới hạn thích hợp từ bbox(obj)

Ví dụ,

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