11

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

4

2 に答える 2

20

これは、 latticeExtraパッケージのniftylayer()関数を使用した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"))

ここに画像の説明を入力してください

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)))
于 2012-04-04T04:50:01.757 に答える
2

sp.layoutで引数を使用できますspplot。または、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()

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

于 2012-04-04T07:07:56.940 に答える