So-net無料ブログ作成
検索選択

R: ggplot2でGISデータを表示する [GIS]

ggplot2でGISデータを表示させてみたので、やり方をメモ。

国土数値情報 行政区域データから石川県のデータN03-14_17_140401をダウンロード。このデータを使用する。

まずはQGISによみこむ。
QGIS スクリーンショット

市町村コード(属性のN03_007)をキーに、ポリゴンをマルチパートにまとめる(参考: QGIS入門 09.いくつかの地物をまとめて一つの地物にする)。ここでは、"Isikawa.shp"という名前でシェープファイルを出力した。
マルチパート化

地図で表示させるデータとして、市町村別の人口と林野面積をつかってみる。石川県の統計資料はいしかわ統計指標ランドにまとめられているので、「平成24年 石川県統計書 抜粋(人口)」と「平成24年 石川県統計書 抜粋(林業)」を入手。また、地方公共団体コードは総務省のサイトから入手できる。

データが公開されているのはありがたいのですが、そのまま機械処理が可能な形式でも入手できるとさらにうれしい。それから、国、地方公共団体、公共機関は「MS ゴシック」とかじゃなくてIPAフォントを使うべきではないかとおもったり。あと、「半角カナ」の使用はもうやめたほうがよいのでは。

それはさておき、得られたデータから以下のようなCSVファイルを作成する。"Isikawa.csv"というファイル名で保存しておく。

コード,市町村,人口,林野面積
17201,金沢市,463443,27331
17202,七尾市,56373,20394
17203,小松市,107622,25787
17204,輪島市,28560,32734
17205,珠洲市,15546,18660
17206,加賀市,69960,21210
17207,羽咋市,22567,2916
17209,かほく市,34351,2437
17210,白山市,109897,55632
17211,能美市,48923,3564
17212,野々市市,54136,0
17324,川北町,6268,0
17361,津幡町,36877,5631
17365,内灘町,27044,241
17384,志賀町,21502,16207
17386,宝達志水町,13796,7146
17407,中能登町,18194,5113
17461,穴水町,9260,13488
17463,能登町,18634,20532

ここからRを使用。

## ファイル
shpfile <- "Isikawa.shp"
datafile <- "Isikawa.csv"

library(ggplot2)
library(maptools)

## 地図
shp <- readShapePoly(shpfile, IDvar = "N03_007")
map <- fortify(shp)
map$id <- as.numeric(map$id)

## データ
data <- read.csv(datafile)
d <- sapply(1:nrow(map),
            function(i)
              data[match(map[i, "id"], data[, "コード"]), c("人口", "林野面積")])
map$population <- as.numeric(d["人口", ])
map$forestarea <- as.numeric(d["林野面積", ])

## 地図表示
library(ggplot2)

## 人口
p1 <- ggplot(map, aes(x = long, y = lat)) +
    geom_polygon(aes(fill = population, group = group)) +
    geom_path(aes(group = group), colour = "white", size = 0.2)
print(p1)

## 林野面積(ha)
p2 <- ggplot(map, aes(x = long, y = lat)) +
    geom_polygon(aes(fill = forestarea, group = group)) +
    geom_path(aes(group = group), colour = "white", size = 0.2)
print(p2)

結果

人口.png
林野面積.png


タグ:R QGIS
nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0