verum ipsum factum

sudillap's blog

Rの基本グラフィックス機能またはggplot2を使って地図を描くには

Rに元から備わっているグラフィックス機能とその機能を拡張するggplot2で日本地図を表示する方法について説明します。

地図データの準備

日本地図のシェープファイルを入手します。入手先は2ヶ所(Global Administrative AreasおよびESRIジャパン株式会社)ありますので、順に説明します。なお、両者のデータの中身は異なるようなので注意してください。


Global Administrative Areasからダウンロードするには、Downloadにアクセスして、プルダウンメニューの「Country」で「Japan」を選択(「File format」メニューは「Shapefile」のままで)すると日本地図のシェープファイルのダウンロードページにジャンプします。
f:id:sudillap:20130326205216p:plain
ちなみに、「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を読み込んだ場合)が表示されます。
f:id:sudillap:20130326205306p:plainf:id:sudillap:20130326205318p:plain

もし、東京都だけを表示したければ、シェープファイルデータを格納している変数(ここの場合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)  # 文字を表示

f:id:sudillap:20130326205328p:plain

次に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")

f:id:sudillap:20130326205338p:plain


参考サイト: