9

国境なしで郡レベルでプロットしたデータがたくさんあります。州境を追加したいと思います。状態シェープファイル (ポリゴン) がspplotありますが、前のマップの上に追加する方法がないようです。2 つの SPDF を取るようにパネル関数を書き直さずにこれを行う方法はありますか?

再現可能な例を次に示します。

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
4

1 に答える 1

12

spplot関数を使用してオーバープロットするには、sp.layout引数を使用できます。たとえば、次のような適切なレイアウト アイテムのリストを作成します。

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

次に、上記のリスト項目をリストとしてsp.layout引数に渡してプロットします。

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

2 つの空間 data.frames が完全に重なっていない場合、x と y の制限が正しくない可能性があります。から適切な制限を抽出することにより、必要に応じてこれを修正できます。bbox(obj)

例えば、

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

ここに画像の説明を入力

于 2012-10-13T15:39:52.353 に答える