2012-04-04 4 views
8

家の家、部屋、ベッドをそれぞれ表す3つのshpファイルがあります。 Rを使ってグラフ上にそれらをプロットして、すべてが互いに重なるようにする必要があります。私はplot関数では、lineを使用して既存のプロットの上に新しい線をプロットすることができますが、spplotに相当するものはありますか?ありがとう。Rootのspplotを使って複数のshpファイルをプロットする

+0

ベースプロットではできないspplotのどの部分が必要ですか? spオブジェクトでは、最初のものをプロットし、次にadd = TRUEをプロットして他のものをオーバーレイします。なぜミックスにspplotを持って来るのですか? – Spacedman

答えて

0

あなたはspplotsp.layout引数を使用することができます。あるいは、ggplot2を使用することもできます。いくつかの例のコード(未テスト):ggplot2

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

は、データの列は、プロットのグラフィックスケールにリンクされています。この場合、xはx座標、yはy座標、groupは、ポイントが属するポリゴンを指定するdata.frame shpの列であり、colはポリゴンの色です。私が使用したジオメトリはgeom_pathです。ポリゴンの入力data.frameに基づいて一連の線を描きます。代わりにgeom_polyを使用することもできます。geom_polyはポリゴンの塗りつぶしもサポートしています。

17

はここlatticeExtraパッケージから気の利いたlayer()機能を使用して、1つのアプローチです。また

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

、あなたがspplot()さんsp.layout=引数を経由して同じ結果を得ることができます。 (first=FALSEを指定すると、「屋根」と「ドアが」/ spplot()の最初の引数として与えられた灰色の四角形以上の後にプロットされるようになります。)

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))) 
関連する問題