8

オーストラリア統計局から入手した、オーストラリアの遠隔地を示すシェープファイルがあります。

http://www.abs.gov.au/AUSSTATS/abs@.nsf/DetailsPage/1270.0.55.005July%202011?OpenDocument

同じURLにPDF「ASGSRemotenessStructureEdition2011PDFMaps」があります-このPDFドキュメントから最初のマップを再現しようとしています。

シェープファイルを読み込み、dataスロットに色情報を追加しました。

ra <- readShapeSpatial("RA_2011_AUST", delete_null_obj = TRUE)
ra@data$COLOUR <- "#FFFFFF"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 0] <- "#006837"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 1] <- "#31A354"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 2] <- "#78C679"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 3] <- "#C2E699"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 4] <- "#FFFFCC"

私に残された唯一のことは、地図をプロットすることです!これは私が立ち往生しているところです...

ra@polygonsは35のポリゴンのリストであり、各ポリゴンにIDはデータフレームへのインデックスであるスロットがありますra@data。だから私がしなければならないのはplot()、で色を見つけるように言うことra@data$COLOUR[ID]です。まあ、完全ではありません。35個のポリゴン(クラス「ポリゴン」)のそれぞれに、独自のポリゴンのリスト(クラス「ポリゴン」)があります。合計で6902個のポリゴンがあります!!!

私の理解でplot()は、ポリゴンがプロットされるのと同じ順序で色のベクトルを渡す必要があります。したがって、各要素が関連するポリゴンのカラー値を保持する長さ6902のベクトルを作成する必要があると思います。私はこれまでどのようにやっていますか?

ポリゴンを順番にプロットすれば簡単ですが、そうではありません。plotOrder35個のポリゴンのそれぞれに整数ベクトルであるスロットがあるため、おそらく、色ベクトルはこれらの各ベクトルの値で並べ替える必要があります。

この時点で、これはすべて少し複雑すぎるようです。私はここで完全に軌道に乗っていないのですか?

アドバイスありがとうございます!

4

1 に答える 1

13

あなたはすでにすべての仕事をしました!

plot(ra, col=ra@data$COLOUR)

または、@Spacedmanが提案したように:

plot(ra, col=ra$COLOUR)

以上です!

ここに画像の説明を入力

ポリゴンの境界線を取り除きたい場合は、次のようにします。

plot(ra, col=ra$COLOUR, border=NA)

ここに画像の説明を入力

編集:この動作を説明する試み:

によると?SpatialPointsDataFrame

デフォルトの ID マッチングを使用する SpatialPolygonsDataFrame は、ポリゴン ID スロットに対してデータ フレームの行名をチェックします。次に、それらは互いに一致し、一意である必要があります (Polygons オブジェクトは ID を共有できません)。ポリゴン ID と一致させる必要がある場合は、データ フレームの行が並べ替えられます。

つまり、ポリゴンは ID に従って順序付けられているため、スロット内のデータフレームの行の順序になっています@data

plot.SpatialPolygons関数を ( を使用して)見ると、getAnywhere(plot.SpatialPolygons)ある時点でこれらの行があります。

...
    polys <- slot(x, "polygons")
    pO <- slot(x, "plotOrder")
    if (!is.null(density)) {
        if (missing(col)) 
            col <- par("fg")
        if (length(col) != n) 
            col <- rep(col, n, n)
        if (length(density) != n) 
            density <- rep(density, n, n)
        if (length(angle) != n) 
            angle <- rep(angle, n, n)
        for (j in pO) .polygonRingHoles(polys[[j]], border = border[j], 
            xpd = xpd, density = density[j], angle = angle[j], 
            col = col[j], pbg = pbg, lty = lty, ...)
    }
...

に入力されるベクトルは、スロットとcol同じ順序、したがって ID と同じ順序になります。それらすべてを同じ方法で索引付けするために使用されます。polygonsplotOrder

于 2013-02-07T08:05:15.247 に答える