R: ggplot2でGISデータを表示する [GIS]
ggplot2でGISデータを表示させてみたので、やり方をメモ。
国土数値情報 行政区域データから石川県のデータN03-14_17_140401をダウンロード。このデータを使用する。
市町村コード(属性の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)
結果
コメント 0