最終更新:2026-01-02

1 はじめに

  • 日本の市区町村地図行政境界データを使って、地図を作成し、Rで可視化する方法を説明する。

Rで利用しやすい行政境界データとしては、主に以下が挙げられる。

  1. 国土交通省国土地理院「地球地図日本」
  2. 国土交通省「国土数値情報 行政区域データ」
  3. 総務省「国勢調査」
  4. NipponMapパッケージ
  • このページでは、総務省「国勢調査」を用いて、市区町村境界データを取得し、Rで可視化する方法を説明する。

2 データの取得

  1. e-Stat(政府統計ポータルサイト)「統計地理情報システム」のページへアクセスする。URL: https://www.e-stat.go.jp/gis

  1. 「境界データダウンロード」へ進む。

  1. 「境界データダウンロード」のページで「小地域」を選択する。

  1. 「国勢調査」を選択する。

  1. 「2015年」の「小地域(町丁・字等)(JGD2000)」を選択する。
  • JGD2011は、東日本大震災後に変動した地形を反映している。
  • JGD2000を選択した理由は、2000、2005、 2010年のデータがすべてJGD2000で提供されているため、経年比較する際に便利であるからである。

  1. 「> 世界測地系平面直角座標系・Shapefile」を選択する。
  • 距離計算が容易なため、平面直角座標系を選択する。
  • 世界測地系緯度経度は、緯度・経度で他のデータとの接続が容易である。

  • 国土数値情報の「行政区域データ」から市区町村境界データをダウンロードする。
  • URL: https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-2025.html
  • 最新のデータセットをダウンロードする。
  • 全国 世界測地系 2025年(令和7年) 603.03MB N03-20250101_GML.zip

  1. 「03岩手県」を選択する。

  1. 「03000 岩手県全域」を選択する。
  • 2015年については「全域」のデータが提供されているが、2020年については「全域」のデータが提供されていないため、2015年を選択した。

  1. ダウンロードしたファイルは以下の通り。

  • シェープファイル形式のファイルを用いる。
  • h27ka03.shp: 市区町村境界データ

3 読み込み

  • 座標参照系は、JGD2000(日本測地系2000、EPSG:2452 / Japan Plane Rectangular CS X)である。
  • 座標形式は、平面直角座標系。
  • フィーチャー数:3923個
  • 属性フィールド:35個
# 必要なパッケージの読み込み
library(sf)
# シェープファイルの読み込み
kokusei03 <- sf::st_read("A002005212015XYSWC03/h27ka03.shp")
## Reading layer `h27ka03' from data source 
##   `/Users/ayumu/Documents/GitHub/research/4_GIS/MapJapan/A002005212015XYSWC03/h27ka03.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 3923 features and 35 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -15521.08 ymin: -138964.2 xmax: 106505.8 ymax: 50361.21
## Projected CRS: JGD2000 / Japan Plane Rectangular CS X
# 座標系の確認
sf::st_crs(kokusei03)
## Coordinate Reference System:
##   User input: JGD2000 / Japan Plane Rectangular CS X 
##   wkt:
## PROJCRS["JGD2000 / Japan Plane Rectangular CS X",
##     BASEGEOGCRS["JGD2000",
##         DATUM["Japanese Geodetic Datum 2000",
##             ELLIPSOID["GRS 1980",6378137,298.257222101,
##                 LENGTHUNIT["metre",1]]],
##         PRIMEM["Greenwich",0,
##             ANGLEUNIT["degree",0.0174532925199433]],
##         ID["EPSG",4612]],
##     CONVERSION["Japan Plane Rectangular CS zone X",
##         METHOD["Transverse Mercator",
##             ID["EPSG",9807]],
##         PARAMETER["Latitude of natural origin",40,
##             ANGLEUNIT["degree",0.0174532925199433],
##             ID["EPSG",8801]],
##         PARAMETER["Longitude of natural origin",140.833333333333,
##             ANGLEUNIT["degree",0.0174532925199433],
##             ID["EPSG",8802]],
##         PARAMETER["Scale factor at natural origin",0.9999,
##             SCALEUNIT["unity",1],
##             ID["EPSG",8805]],
##         PARAMETER["False easting",0,
##             LENGTHUNIT["metre",1],
##             ID["EPSG",8806]],
##         PARAMETER["False northing",0,
##             LENGTHUNIT["metre",1],
##             ID["EPSG",8807]]],
##     CS[Cartesian,2],
##         AXIS["northing (X)",north,
##             ORDER[1],
##             LENGTHUNIT["metre",1]],
##         AXIS["easting (Y)",east,
##             ORDER[2],
##             LENGTHUNIT["metre",1]],
##     USAGE[
##         SCOPE["Cadastre, engineering survey, topographic mapping (large and medium scale)."],
##         AREA["Japan - onshore - Honshu north of 38°N approximately - Aomori-ken; Akita-ken; Yamagata-ken; Iwate-ken; Miyagi-ken."],
##         BBOX[37.73,139.49,41.58,142.14]],
##     ID["EPSG",2452]]

4 データ確認

# データの確認
kokusei03
  • 含まれる属性フィールドは以下の通りである。
  • 都道府県名、市区町村名などは日本語表記である。
  • KEY_CODEを使えば、他の年次の国勢調査や経済センサスなどの統計データと接続できる。
No. フィールド名 説明 備考
1 KEY_CODE 図形と集計データのリンクコード KEN+KEYCODE2
2 PREF 都道府県番号
3 CITY 市区町村番号
4 S_AREA 町字コード+丁目、字などの番号 KIHON1+KIHON2
5 PREF_NAME 都道府県名
6 CITY_NAME 区町村名 1)CSS_NAME(ない場合はGST_NAME)
7 S_NAME 町丁・字等名称
8 KIGO_E 特殊記号E(町丁・字等重複フラグ)
9 HCODE 分類コード
10 AREA 面積(㎡)
11 PERIMETER 周辺長(m)
12 H27KAxx_ 内部ID
13 H27KAxx_ID 外部ID
14 KEN 都道府県番号 町丁・字等番号
15 KEN_NAME 都道府県名
16 SITYO_NAME 支庁・振興局名
17 GST_NAME 郡市・特別区・政令指定都市名
18 CSS_NAME 区町村名
19 KIHON1 町字コード
20 DUMMY1 ダミー(“-”)
21 KIHON2 丁目、字などの番号
22 KEYCODE1 マッチング番号 CITY+KIHON1+KIHON2
23 KEYCODE2 町丁・字等別結果マッチング番号
24 AREA_MAX_F 面積最大フラグ
25 KIGO_D 特殊記号D(飛び地、抜け地フラグ)
26 N_KEN 抜け地県番号
27 N_CITY 抜け地市区町村番号
28 KIGO_I 特殊記号I(島フラグ)
29 MOJI 町丁・字等名称
30 KBSUM 基本単位区(調査区)数
31 JINKO 人口 KIGO_Eが付与されている場合は、E1に代表してセットし、En(n≧2)は0(ゼロ)
32 SETAI 世帯数 KIGO_Eが付与されている場合は、E1に代表してセットし、En(n≧2)は0(ゼロ)
33 X_CODE 図形中心点X座標(10進経度)
34 Y_CODE 図形中心点Y座標(10進緯度)
35 KCODE1 町丁・字等番号 KIHON1+DUMMY1+KIHON2

5 可視化1 with base R

# 簡単な地図表示
library(sf)
# 地図表示
plot(sf::st_geometry(kokusei03))
TRUE

TRUE

6 可視化2 with ggplot2

6.1 ラベルの整理

# CITYごとにAREAが最大の地物を特定
library(dplyr)
kokusei03 <- kokusei03 %>%
  group_by(PREF, CITY) %>%
  mutate(CityMax = max(AREA)) %>%
  ungroup() %>%
  mutate(CityMaxD = ifelse(AREA == CityMax, 1, 0))

# 新しくCITY_LABELという変数=CITY_NAMEを作成。
# CITYの中で面積が最大の地物にのみこのCITY_NAMEを表示
kokusei03$CITY_LABEL <- ifelse(kokusei03$CityMaxD == 1,
                              kokusei03$CITY_NAME, "")

6.2 地図描写

# 地図の作成

library(ggplot2)
ggplot(data = kokusei03) + # 地図データの指定
  geom_sf(fill = "lightyellow", color = "lightgrey") + # 塗り
  theme_minimal() + # ミニマルテーマの適用
  labs(title = "Population Census of Japan",
       subtitle = "Administrative Boundaries of Japan Cities",
       caption = "Source: Statistics Bureau, Ministry of Internal Affairs and Communications")  +
       theme(axis.text = element_blank(), # 目盛りを非表示
        axis.title = element_blank()) + # 軸タイトルを非表示 
  geom_sf_text(aes(label = CITY_LABEL), size = 2, family = "Osaka") # City_NAMEを表示
TRUE

TRUE

# 保存
ggsave("fig/kokusei03.png", width = 8, height = 6, dpi = 300)

6.3 コロプレスマップ

  • scale_fill_viridis_c(option = "plasma")を使って、人口を色で表現するコロプレスマップを作成する。
    • optionには、 "plasma""magma", "inferno", "cividis"などが利用できる。
  • scale_fill_viridis_c(option = "plasma")以外にも、scale_fill_viridis_b(), scale_fill_viridis_d()などが利用できる。
    • scale_fill_viridis_b()は、離散値に対して利用できる。
    • scale_fill_viridis_d()は、カテゴリカルデータに対して利用できる。
  • 他にscale_colour_viridis_c()を使って、人口を色で表現するコロプレスマップを作成することもできる。
# 人口を色で表現するコロプレスマップの作成
library(ggplot2)
ggplot(data = kokusei03) + # 地図データの指定
  geom_sf(aes(fill = JINKO), color = "black") + #
  scale_fill_viridis_c(option = "inferno", alpha = 0.9) + # カラースケールの指定
  theme_minimal() + # ミニマルテーマの適用
  labs(title = "Population Census of Japan",
       subtitle = "Population Distribution by Small Area",
       caption = "Source: Statistics Bureau, Ministry of Internal Affairs and Communications",
       fill = "Population")  +
       theme(axis.text = element_blank(), # 目盛りを非表示
        axis.title = element_blank()) + # 軸タイトルを非表示
  geom_sf_text(aes(label = CITY_LABEL), size = 2, 
               family = "Osaka", color = "white") # City_NAMEを表示
TRUE

TRUE

# 保存
ggsave("fig/kokusei03_choropleth.png", width = 8
, height = 6, dpi = 300)

7 市区町村番号レベルで集計

7.1 集計

# 市区町村番号レベルで地図を集計
library(dplyr)
kokusei03_city <- kokusei03 %>%
  group_by(PREF, CITY, PREF_NAME, CITY_NAME) %>%
  summarise(geometry = sf::st_union(geometry),
            JINKO = sum(JINKO),
            SETAI = sum(SETAI)
            ) %>%
  ungroup()
# 保存
sf::st_write(kokusei03_city, "Data_output/kokusei03_city.shp", delete_dsn = TRUE)
## Deleting source `Data_output/kokusei03_city.shp' using driver `ESRI Shapefile'
## Writing layer `kokusei03_city' to data source 
##   `Data_output/kokusei03_city.shp' using driver `ESRI Shapefile'
## Writing 33 features with 6 fields and geometry type Unknown (any).
# データの確認
kokusei03_city

7.2 コロプレスマップ

  • 岩手県の県庁所在地である盛岡市の人口が297631人(約29.8万人)で最も多い。
  • RColorBrewerパッケージを使って、人口を色で表現するコロプレスマップを作成する。
  • scale_fill_gradientn(colors=brewer.pal(10,"GnBu"), na.value = "white")を使って、色のグラデーションを指定する。
    • 色は、"GnBu"以外にも、 "YlGnBu""RdPu", "YlOrRd"などが利用できる。
    • na.valueは、欠損値の色を指定する。
    • 10は、色の数(3以上の数値)を指定する。
# 地図の作成


library(RColorBrewer)
library(ggplot2)

ggplot(data = kokusei03_city) + # 地図データの指定
  geom_sf(aes(fill = JINKO/10000), color = "lightgrey") + # 人口を色で表現
  scale_fill_gradientn(colors=brewer.pal(10,"GnBu"), 
                       na.value = "white")+
  labs(fill = "Population \n (10 thousands)")  +
  theme_minimal() + # ミニマルテーマの適用
  labs(title = "Population Census of Japan",
       subtitle = "Administrative Boundaries of Japan Cities",
       caption = "Source: Statistics Bureau, Ministry of Internal Affairs and Communications")  +
       theme(axis.text = element_blank(), # 目盛りを非表示
        axis.title = element_blank()) + # 軸タイトルを非表示 
  geom_sf_text(aes(label = CITY_NAME), size = 2, family = "Osaka", color = "red") # City_NAMEを表示
TRUE

TRUE

# 保存
ggsave("fig/kokusei03_city.png", width = 8, height = 6, dpi = 300)

参考文献