Rの基本グラフィックス機能またはggplot2を使って地図を描くには
Rに元から備わっているグラフィックス機能とその機能を拡張するggplot2で日本地図を表示する方法について説明します。
地図データの準備
日本地図のシェープファイルを入手します。入手先は2ヶ所(Global Administrative AreasおよびESRIジャパン株式会社)ありますので、順に説明します。なお、両者のデータの中身は異なるようなので注意してください。
Global Administrative Areasからダウンロードするには、Downloadにアクセスして、プルダウンメニューの「Country」で「Japan」を選択(「File format」メニューは「Shapefile」のままで)すると日本地図のシェープファイルのダウンロードページにジャンプします。
ちなみに、「File format」メニューで「R (SpatialPolygonsDataFrame)」を選択すると、バイナリ書式ファイルデータ(.Rdata)をダウンロードすることができます。好みに応じで選択してください。
ESRIジャパン株式会社からダウンロードするには、全国市区町村界データにアクセス後、指示に従ってダウンロードして下さい。
ところで、全国市区町村界データのReadme.txtには使用規定が書かれており、そこに次の条項あります。
第2条 遵守事項
1. お客様は、本データをArcGISシリーズ(アメリカ合衆国カリフォルニア州法人である
Environmental Systems Research Institute, Inc.の地理情報システムに関する
一連のソフトウェア製品)以外のソフトウェアで使用することはできません。
これを読むとRでは使用できないと思われるのですが、RjpWiki:ShapeFileライブラリの「ESRIジャパン社が公開している全国市区町村界データの加工・再公開の許可について」を読むとRでも使用できそうにも思えるのですが、どうなのでしょうか。
というわけで、以降ではGlobal Administrative Areasのシェープファイルを用いて日本地図を表示します。
データをダウンロードしたら適当なディレクトリにファイルを解凍してください。
Rライブラリの準備
地図を表示するには次のパッケージが必要となりますので、事前にインストールしておきます。
シェープファイルの読み込み
Global Administrative Areasのデータを解凍すると分かりますが、次の3つの異なるレベルのシェープファイルが含まれています。
- JPN_adm0.shp:日本列島の全体地図
- JPN_adm1.shp:都道府県地図
- JPN_adm2.shp:市区町村地図
たとえば、JPN_adm1.shp(都道府県地図)を読み込むには次のようにします。
library(maptools) library(spsurvey) jpn <- readShapePoly("JPN_adm1.shp") # シェープファイルはカレントディレクトにあるとします jpn.dbf <- read.dbf("JPN_adm1.dbf") # dbfファイルの読み込み
readShapePolyはmaptoolsパッケージの関数です。読み込み時間は1秒くらいでした。
spsurveyパッケージのread.shape関数を使ってもシェープファイルを読み込めますが、非常に時間がかかりますので、あまりオススメはできません。実際、都道府県シェープファイルの読み込みに65秒、市区町村で732秒かかりました(もちろん環境依存)。
dbfファイルの中身を表示してみます。下記の情報を使うと一部の地域のみ表示することも可能になります(例は後述します)。
jpn.dbf ID_0 ISO NAME_0 ID_1 NAME_1 VARNAME_1 NL_NAME_1 HASC_1 CC_1 TYPE_1 ENGTYPE_1 VALIDFR_1 VALIDTO_1 REMARKS_1 Shape_Leng Shape_Area area_mdm 1 116 JPN Japan 1457 Aichi Aiti ??? JP.AI <NA> Ken Prefecture Unknown Unknown <NA> 8.194165 0.5090549 0.5090549 2 116 JPN Japan 1458 Akita <NA> ??? JP.AK <NA> Ken Prefecture Unknown Unknown <NA> 8.995578 1.2236946 1.2236946 3 116 JPN Japan 1459 Aomori <NA> ??? JP.AO <NA> Ken Prefecture Unknown Unknown <NA> 10.431820 1.0315494 1.0315494 4 116 JPN Japan 1460 Chiba Tiba|Tsiba ??? JP.CH <NA> Ken Prefecture Unknown Unknown <NA> 6.571243 0.5011059 0.5011059 5 116 JPN Japan 1461 Ehime <NA> ??? JP.EH <NA> Ken Prefecture Unknown Unknown <NA> 15.999670 0.5586251 0.5586251 6 116 JPN Japan 1462 Fukui Hukui ??? JP.FI <NA> Ken Prefecture Unknown Unknown <NA> 6.790149 0.4224879 0.4224879 7 116 JPN Japan 1463 Fukuoka Hukuoka ??? JP.FO <NA> Ken Prefecture Unknown Unknown <NA> 8.266049 0.4862017 0.4862017 8 116 JPN Japan 1464 Fukushima Hukusima ??? JP.FS <NA> Ken Prefecture Unknown Unknown <NA> 7.533269 1.3975740 1.3975740 9 116 JPN Japan 1465 Gifu Gihu ??? JP.GF <NA> Ken Prefecture Unknown Unknown <NA> 6.635546 1.0570861 1.0570861 10 116 JPN Japan 1466 Gunma GunmaGumma ??? JP.GM <NA> Ken Prefecture Unknown Unknown <NA> 4.920751 0.6406968 0.6406968 11 116 JPN Japan 1467 Hiroshima Hirosima ??? JP.HS <NA> Ken Prefecture Unknown Unknown <NA> 13.029234 0.8284376 0.8284376 12 116 JPN Japan 1468 Hokkaido Ezo|Yeso|Yezo ??? JP.HK <NA> Do Circuit Unknown Unknown <NA> 35.144123 8.6717107 8.6717107 13 116 JPN Japan 1469 Hyogo Hiogo ??? JP.HG <NA> Ken Prefecture Unknown Unknown <NA> 9.991132 0.8280074 0.8280074 14 116 JPN Japan 1470 Ibaraki <NA> ??? JP.IB <NA> Ken Prefecture Unknown Unknown <NA> 5.595910 0.6125375 0.6125375 15 116 JPN Japan 1471 Ishikawa Isikawa ??? JP.IS <NA> Ken Prefecture Unknown Unknown <NA> 7.145355 0.4275550 0.4275550 16 116 JPN Japan 1472 Iwate <NA> ??? JP.IW <NA> Ken Prefecture Unknown Unknown <NA> 9.800987 1.5975500 1.5975500 17 116 JPN Japan 1473 Kagawa <NA> ??? JP.KG <NA> Ken Prefecture Unknown Unknown <NA> 5.257244 0.1689363 0.1689363 18 116 JPN Japan 1474 Kagoshima <NA> ???? JP.KS <NA> Ken Prefecture Unknown Unknown <NA> 25.913128 0.8627851 0.8627851 19 116 JPN Japan 1475 Kanagawa <NA> ???? JP.KN <NA> Ken Prefecture Unknown Unknown <NA> 5.303150 0.2365421 0.2365421 20 116 JPN Japan 1476 Kochi Koti ??? JP.KC <NA> Ken Prefecture Unknown Unknown <NA> 9.432022 0.6827940 0.6827940 21 116 JPN Japan 1477 Kumamoto <NA> ??? JP.KM <NA> Ken Prefecture Unknown Unknown <NA> 13.608921 0.7266430 0.7266430 22 116 JPN Japan 1478 Kyoto Kioto ??? JP.KY <NA> Fu Urban Prefecture Unknown Unknown <NA> 6.139137 0.4578284 0.4578284 23 116 JPN Japan 1479 Mie Miye ??? JP.ME <NA> Ken Prefecture Unknown Unknown <NA> 12.134027 0.5670699 0.5670699 24 116 JPN Japan 1480 Miyagi <NA> ??? JP.MG <NA> Ken Prefecture Unknown Unknown <NA> 11.110625 0.7453862 0.7453862 25 116 JPN Japan 1481 Miyazaki <NA> ??? JP.MZ <NA> Ken Prefecture Unknown Unknown <NA> 7.626958 0.7343826 0.7343826 26 116 JPN Japan 1482 Nagano <NA> ??? JP.NN <NA> Ken Prefecture Unknown Unknown <NA> 7.662159 1.3596386 1.3596386 27 116 JPN Japan 1483 Naoasaki Nagasaki ??? JP.NS <NA> Ken Prefecture Unknown Unknown <NA> 35.052216 0.4067374 0.4067374 28 116 JPN Japan 1484 Nara <NA> ??? JP.NR <NA> Ken Prefecture Unknown Unknown <NA> 3.485988 0.3607166 0.3607166 29 116 JPN Japan 1485 Niigata <NA> ??? JP.NI <NA> Ken Prefecture Unknown Unknown <NA> 11.208076 1.2932382 1.2932382 30 116 JPN Japan 1486 Oita <NA> ??? JP.OT <NA> Ken Prefecture Unknown Unknown <NA> 9.383343 0.6134952 0.6134952 31 116 JPN Japan 1487 Okayama <NA> ??? JP.OY <NA> Ken Prefecture Unknown Unknown <NA> 10.899804 0.7159576 0.7159576 32 116 JPN Japan 1488 Okinawa <NA> ??? JP.ON <NA> Ken Prefecture 19720515 Unknown <NA> 17.981032 0.2105791 0.2105791 33 116 JPN Japan 1489 Osaka <NA> ??? JP.OS <NA> Fu Urban Prefecture Unknown Unknown <NA> 5.167053 0.1880098 0.1880098 34 116 JPN Japan 1490 Saga <NA> ??? JP.SG <NA> Ken Prefecture Unknown Unknown <NA> 4.872416 0.2376768 0.2376768 35 116 JPN Japan 1491 Saitama <NA> ??? JP.ST <NA> Ken Prefecture Unknown Unknown <NA> 3.194298 0.3793111 0.3793111 36 116 JPN Japan 1492 Shiga Siga ??? JP.SH <NA> Ken Prefecture Unknown Unknown <NA> 3.300463 0.3976926 0.3976926 37 116 JPN Japan 1493 Shimane Simane ??? JP.SM <NA> Ken Prefecture Unknown Unknown <NA> 11.457792 0.6690916 0.6690916 38 116 JPN Japan 1494 Shizuoka Sizuoka ??? JP.SZ <NA> Ken Prefecture Unknown Unknown <NA> 13.495757 0.7898159 0.7898159 39 116 JPN Japan 1495 Tochigi Totigi ??? JP.TC <NA> Ken Prefecture Unknown Unknown <NA> 3.694183 0.6456594 0.6456594 40 116 JPN Japan 1496 Tokushima Tokusima ??? JP.TS <NA> Ken Prefecture Unknown Unknown <NA> 5.862819 0.4024895 0.4024895 41 116 JPN Japan 1497 Tokyo Edo|Yedo|Tokio|T「quio ??? JP.TK <NA> To Metropolis Unknown Unknown <NA> 4.466625 0.1793922 0.1793922 42 116 JPN Japan 1498 Tottori <NA> ??? JP.TT <NA> Ken Prefecture Unknown Unknown <NA> 4.444174 0.3450015 0.3450015 43 116 JPN Japan 1499 Toyama <NA> ??? JP.TY <NA> Ken Prefecture Unknown Unknown <NA> 4.233530 0.4302356 0.4302356 44 116 JPN Japan 1500 Wakayama <NA> ???? JP.WK <NA> Ken Prefecture Unknown Unknown <NA> 7.073690 0.4533757 0.4533757 45 116 JPN Japan 1501 Yamagata <NA> ??? JP.YT <NA> Ken Prefecture Unknown Unknown <NA> 5.430651 0.9657578 0.9657578 46 116 JPN Japan 1502 Yamaguchi Yamaguti ??? JP.YC <NA> Ken Prefecture Unknown Unknown <NA> 15.226488 0.5984350 0.5984350 47 116 JPN Japan 1503 Yamanashi Yamanasi ??? JP.YN <NA> Ken Prefecture Unknown Unknown <NA> 3.404750 0.4447103 0.4447103
ちなみに、バイナリ書式ファイルデータ(.Rdata)をダウンロードした場合は、load関数でデータを読み込みます。
load("JPN_adm1.RData") # オブジェクトgadmにシェープファイルデータが格納されています。
地図の表示
基本グラフィックスまたはggplot2を使って地図を表示します。
地図の表示範囲を指定できると便利なので、必要に応じて次のように表示範囲の経度・緯度を設定します。
- 日本列島全体
xlim <- c(122, 154) # 経度 ylim <- c(20, 46) # 緯度
この設定ですと日本の領土全体を含むので表示範囲が広すぎるかもしれません。
- 日本列島(沖縄を含める)
xlim <- c(126, 146) # 経度 ylim <- c(26, 46) # 緯度
- 日本列島(沖縄を含めない)
xlim <- c(128, 146) # 経度 ylim <- c(30, 46) # 緯度
都道府県地図を表示する場合を想定して、県ごとの色を適当に決めてから基本グラフィックスで地図を表示しましょう。
library(RColorBrewer) col <- sample(1:8,size=47,replace=TRUE) # 県ごとの色 plot(jpn, xlim=xlim, ylim=ylim, col=brewer.pal(8,"Accent")[col]) # 地図をプロット。色はAccentパレットを使用。
すると次のような都道府県地図と市区町村地図(JPN_adm2.shpを読み込んだ場合)が表示されます。
もし、東京都だけを表示したければ、シェープファイルデータを格納している変数(ここの場合jpn)から東京都のデータだけを抜き出してプロットすれば欲しい地図が得られます。
上の方で表示したdbfファイルのNAME_1カラムに県名が入っていますので、それを利用して抽出します。
東京都に対応するNAME_1は「Tokyo」です。ちなみに長崎県は「Naoasaki」(Nagasakiではない)となっているので注意してください。
次のスクリプトは東京都の地図に新宿区役所の場所を表示するためのサンプルです。
plot(jpn[jpn$NAME_1=="Tokyo",]) # 東京都のデータだけを抽出。JPN_adm2.shpを読み込んでいるとします。 points(139.7036, 35.69389, lwd=20, col="red") # 新宿区役所の位置に打点 text(139.7036, 35.69389, "新宿", col="blue", adj = c(-0.3,0.5), cex=2) # 文字を表示
次にggplot2を使って地図を表示しましょう。
ggplot2で地図を表示するときの注意点として、事前にfortify関数でシェープファイルデータをggplot2に合致するデータ形式に変換しておく必要があります。
Rスクリプト例と結果を示します。
library(ggplot2) library(maptools) jpn <- readShapePoly("JPN_adm1.shp") # シェープファイルはカレントディレクトにあるとします map <- fortify(jpn) # 日本全体 #map <- fortify(jpn[jpn$NAME_1=="Tokyo",]) # 東京都だけ表示したい場合 xlim <- c(128, 146) # 経度 ylim <- c(30, 46) # 緯度 col <- sample(1:8,size=47,replace=TRUE) # 県ごとの色 ggplot() + geom_polygon(aes(long,lat,group=group,fill=as.character(col[as.integer(id)+1])),color="black",data=map) + coord_fixed(ratio=1) + geom_point(aes(x=139.7036, y=35.69389),color="blue",size=10) + geom_text(aes(x=139.7036, y=35.69389),label="新宿",hjust=-0.2,color="red",size=10) + guides(col=FALSE, fill=FALSE) + xlim(xlim) + ylim(ylim) + scale_fill_brewer(type="qual",palette="Accent")
参考サイト: