10

Rの関数fortifyを使用してマップをプロットしようとしています。しかし、データの処理中に常にエラーが発生します。次のコードを使用してシェープファイルを読み取りました。

shape <- readShapeSpatial("Lond_City/lond_city.shp")

シェープファイルは、次のドロップボックスの場所にあります: https ://www.dropbox.com/sh/d4w6saailydtu1r/5oIa56xV6S

次に、次のコマンドを使用しようとしました。

shape1 <- fortify(shape,region="data")

上記のコードでは、「データ」の代わりに何を入れるべきですか。これは混乱しているように見える場所です。Rでデータまたはシェープファイルを開くことができます。ただし、強化行を実行すると、次のエラーが発生します。

'[.data.frame'(attr ,, region)のエラー:未定義の列が選択されました

誰かが例を使ってシェープファイルを適切に強化する方法を教えてもらえますか?fortifyを使用する理由は、シェープファイルをデータポイントと結合するためです。

どうもありがとう。

Jdbaba

4

2 に答える 2

12

問題は、fortify実際に存在する列を指定する必要があることです。以下のサンプルコードから入力すると、列str(lon.shape)がないことがわかります。region

> str(lon.shape)
Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
  ..@ data       :'data.frame': 1 obs. of  7 variables:
  .. ..$ ons_label: chr "00AA"
  .. ..$ name     : chr "City of London"
  .. ..$ label    : chr "02AA"
  .. ..$ X_max    : num 533843
  .. ..$ y_max    : num 182198
  .. ..$ X_min    : num 0
  .. ..$ y_min    : num 0
  ..@ polygons   :List of 1
  .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
  .. .. .. ..@ Polygons :List of 1
  .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
  .. .. .. .. .. .. ..@ labpt  : num [1:2] 532464 181220
  .. .. .. .. .. .. ..@ area   : num 3151465
  .. .. .. .. .. .. ..@ hole   : logi FALSE
  .. .. .. .. .. .. ..@ ringDir: int 1
  .. .. .. .. .. .. ..@ coords : num [1:771, 1:2] 531027 531029 531036 531074 531107 ...
  .. .. .. ..@ plotOrder: int 1
  .. .. .. ..@ labpt    : num [1:2] 532464 181220
  .. .. .. ..@ ID       : chr "0"
  .. .. .. ..@ area     : num 3151465
  ..@ plotOrder  : int 1
  ..@ bbox       : num [1:2, 1:2] 530967 180404 533843 182198
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:2] "x" "y"
  .. .. ..$ : chr [1:2] "min" "max"
  ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots
  .. .. ..@ projargs: chr "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +units=m +no_defs" 

代わりに、次のようにを使用してみてくださいname

lon.df <- fortify(lon.shape, region = "name")

このデータフレームを生成するもの:

> head(lon.df)
      long      lat order  hole piece            group             id
1 531026.9 181611.1     1 FALSE     1 City of London.1 City of London
2 531028.5 181611.2     2 FALSE     1 City of London.1 City of London
3 531036.1 181611.5     3 FALSE     1 City of London.1 City of London
4 531074.0 181610.3     4 FALSE     1 City of London.1 City of London
5 531107.0 181609.3     5 FALSE     1 City of London.1 City of London
6 531117.1 181608.9     6 FALSE     1 City of London.1 City of London

これを実行する1つの方法は、最初から最後までです。

library(rgdal)
library(ggplot2)
library(rgeos)

shape.dir <- "c:/test/london" # use your directory name here

lon.shape <- readOGR(shape.dir, layer = "lond_city")
lon.df <- fortify(lon.shape, region = "name")

ggplot(lon.df, aes(x = long, y = lat, group = group)) +
    geom_polygon(colour = "black", fill = "grey80", size = 1) +
    theme()

...結果は次のようになります。

スクリーンショット

于 2013-01-17T03:01:25.543 に答える
2

labelの代わりに配置する必要がありdataます。

require(maptools); require(ggplot2)
shape <- readShapeSpatial("Lond_City/lond_city.shp")
shape1 <- fortify(shape,region="label")

これを見つけるために、私は次のデータ要素を調べましたshape

> shape@data
  ons_label           name label    X_max    y_max X_min y_min
0      00AA City of London  02AA 533842.7 182198.4     0     0

これは、機能していることを示しているons_labelか、name機能している可能性があり、目的により適している可能性があります。

グループが1つしかないように見えるため、シェープファイルは少し変わっていることに注意してください。

于 2013-01-17T03:00:32.480 に答える