【R】シェープファイルから地図を描く
1.はじめに
地図を描く方法はいろいろありますが、柔軟に地図がかけるものの一つがシェープファイルを使うことです。パスコのホームページによると、シェープファイルとは
シェープファイル(Shape File)とは、「図形情報と属性情報をもった地図データファイル」が集まったファイルです。すなわち、ある図形が地球上の「どの」位置にあり、「どんな」形状をしているのか、またその図形はどんな「属性」(性質・特徴・数値など)を持っているのか、という情報のファイルであると言えます。このシェープファイルは、GISの世界市場でトップシェアを誇る米国ESRI社が提唱したもので、ベクタデータの記録形式の一つです。一般に広く公開されており、GIS業界の標準フォーマットとも言われており、ESRI・LGGI製品はもちろん、多くのGISソフトウェアで利用が可能です。
です。このデータを取得して地図を描いてみましょう。こちらのサイトを参考にさせていただきました。
2.シェープファイルの入手
私の出身地の石川県の地図を描いてみます。データは、日本の統計が閲覧できる政府統計ポータルサイトであるs-Stat(政府統計の総合窓口)から入手します。
統計データを活用する>地図>協会データダウンロード>小地域>国勢調査>2015年>小地域(町丁・字等別)>世界測地系緯度経度・Shapefile>17.石川県>17000 石川県全域 のShapefileデータをダウンロードします。
データを展開し、shp
フォルダに保存してあるものとします。以下の4つのファイルがありました。
・ h27ka17.dbf
・ h27ka17.prj
・ h27ka17.shp
・ h27ka17.shx
3.パッケージ
使用するR
のパッケージをインストールします。ggplot2
は、sf
オブジェクトのためのgeom_sf
等が入っている開発版が必要らしいです。
devtools::install_github("tidyverse/ggplot2")
install.packages("sf")
install.packages("dplyr") # 領域結合で使用
install.packages("ggrepel") # ラベル位置の調整で使用
コードの前半で読み込みます。
library(ggplot2)
library(ggrepel)
library(sf)
library(dplyr)
4.ファイル読込
シェープファイルを読み込みます。
map <- read_sf("shp/h27ka17.shp") # 石川県のシェープファイル
5.地図を描く
5.1 簡単な地図
最低限の地図なら、このように簡単に描けます。
ggplot(map) + geom_sf()
5.2 人口毎に色分け
シェープファイルには人口の情報(JINKO)も含まれていました。これを使って市町村を色分けしてみます。summarize
にて各市町村の人口を合計します。それをgeom_sf
にて色分け表示します。
map %>%
group_by(CITY_NAME) %>% # 市名でグルーピング
summarize('Pop.total' = sum(JINKO)) %>% # グループ単位で領域結合, 人口計算
mutate( # 重心計算と座標値の抽出
centroid = st_centroid(geometry),
x = st_coordinates(centroid)[, 1],
y = st_coordinates(centroid)[, 2]
) %>%
ggplot() +
geom_sf(aes(fill = Pop.total)) + # 人口毎に色分け
coord_sf(datum = NA) +
theme_void()+
geom_text_repel(aes(x = x, y = y, label = CITY_NAME),
family = "JP4", size = 2)
人口は、金沢市がダントツ多いです。
5.3 面積毎に色分け
次は面積毎に色分けです。先の人口のところをAREAに直すだけです。
map %>%
group_by(CITY_NAME) %>% # 市名でグルーピング
summarize('Area.total' = sum(AREA)) %>% # グループ単位で領域結合, 人口計算
mutate( # 重心計算と座標値の抽出
centroid = st_centroid(geometry),
x = st_coordinates(centroid)[, 1],
y = st_coordinates(centroid)[, 2]
) %>%
ggplot() +
geom_sf(aes(fill = Area.total)) +
coord_sf(datum = NA) +
theme_void()+
geom_text_repel(aes(x = x, y = y, label = CITY_NAME),
family = "JP4", size = 2)
6.さいごに
シェープファイルを使うといろいろな情報を含めたきれいなマップを描けます。