最終更新:2026-03-30

1 はじめに

  • rayshader を使わず、ggplot2 で東京都(島嶼部除く)の人口分布を2Dコロプレスマップとして描画する。
  • Kontur Population のヘックスポリゴンをそのまま geom_sf() で描画し、人口を Hiroshige パレットで色付けする。
  • データソースとして、世界全体をカバーするKontur Population(400m解像度のH3ヘックスグリッド)と、国土数値情報の行政区域データを使用する。

1.1 使用データ

データ 説明
Kontur Population(日本) 400m解像度の人口データ(GeoPackage形式)
国土数値情報 行政区域(東京都) 東京都の行政区域ポリゴン(Shapefile形式)

1.2 Kontur Population の仕様

項目 仕様
ファイル形式 GeoPackage (.gpkg)
空間解像度 400m(H3解像度8)
座標参照システム EPSG:3857(Pseudo-Mercator)
集計基準年 2023年
カバレッジ 世界全域

2 データのダウンロード

2.1 Kontur Population(日本)

  1. HDX(Humanitarian Data Exchange)にアクセスする。
  2. 検索ボックスで「Japan」を検索する。
  3. kontur_population_JP_20231101.gpkg(45.8MB)をダウンロードして作業フォルダに配置する。

2.2 国土数値情報 行政区域(東京都)

  1. 国土数値情報ダウンロードサービスにアクセスする。
  2. 「行政区域」→ 東京都 → Shapefile形式でダウンロードする。
  3. 解凍して N03-20250101_13_GML/ フォルダを作業フォルダに配置する。

3 パッケージの読み込み

library(sf)          # ベクターデータの入出力・空間演算
library(ggplot2)     # データの可視化・地図描画
library(MetBrewer)   # 美術館にインスパイアされたカラーパレット
library(scales)      # 凡例ラベルの数値フォーマット(comma など)

4 境界データの読み込みとクリップ

# 国土数値情報の行政区域データ(東京都)を読み込む
tokyo <- sf::st_read("N03-20250101_13_GML/N03-20250101_13.shp", quiet = TRUE)

# 市区町村コードで島嶼部(13361以上)を除いた本土部分を抽出する
# 13101(千代田区)〜 13308(西多摩郡檜原村)が本土の範囲
tokyo_main <- tokyo[
  as.numeric(tokyo$N03_007) >= 13101 &
  as.numeric(tokyo$N03_007) <= 13308, ]

cat("Municipalities:", nrow(tokyo_main), "polygons\n")
## Municipalities: 151 polygons
# Kontur Population(日本)の GeoPackage を読み込む
JP <- sf::st_read("kontur_population_JP_20231101.gpkg", quiet = TRUE)

# 東京本土の境界に含まれるヘックスのみ抽出する(空間クリップ)
# まず st_union で境界を1ポリゴンに統合し、CRS を合わせてクリップする
tokyo_main_union <- sf::st_union(tokyo_main)
tokyo_main_3857  <- sf::st_transform(tokyo_main_union, 3857)
pop_main <- JP[tokyo_main_3857, ]

cat("Clipped hexagons:", nrow(pop_main), "\n")
## Clipped hexagons: 2265

5 2D人口マップの描画

# 市区町村ポリゴンを EPSG:3857 に変換する(レイヤーの CRS を統一するため)
tokyo_main_sf_3857 <- sf::st_transform(tokyo_main, 3857)

# Hiroshige パレット(10色)を取得する
palette_cols <- MetBrewer::met.brewer("Hiroshige", n = 10, type = "continuous")

# ggplot2 で人口コロプレスマップを描画する
ggplot2::ggplot() +
  # 下地として東京本土全体のポリゴンを薄いグレーで描く
  ggplot2::geom_sf(
    data      = tokyo_main_sf_3857,
    fill      = "grey92",
    color     = "grey60",
    linewidth = 0.4
  ) +
  # Kontur ヘックスを人口の大きさで色分けして重ねる
  ggplot2::geom_sf(
    data  = pop_main,
    ggplot2::aes(fill = population),
    color = NA                      # ヘックスの境界線は非表示
  ) +
  # 市区町村の境界線を上から重ねて区分を明確にする
  ggplot2::geom_sf(
    data      = tokyo_main_sf_3857,
    fill      = NA,                 # 塗りつぶしなし
    color     = "white",
    linewidth = 0.5
  ) +
  # カラースケールを設定する
  ggplot2::scale_fill_gradientn(
    colors = palette_cols,
    name   = "Population\n(400m grid)",
    labels = scales::comma           # 3桁区切りの数値表示
  ) +
  # タイトル・キャプションを設定する
  ggplot2::labs(
    title    = "Population Distribution: Tokyo (Mainland)",
    subtitle = "Kontur Population 2023 (400m H3 hex grid)",
    caption  = "Data: Kontur Population 2023, MLIT Japan | Author: Ayumu Tanaka"
  ) +
  # 背景・軸を削除してシンプルなレイアウトにする
  ggplot2::theme_void() +
  ggplot2::theme(
    plot.title    = ggplot2::element_text(size = 18, face = "bold",
                                          hjust = 0.5, margin = ggplot2::margin(b = 5)),
    plot.subtitle = ggplot2::element_text(size = 11, hjust = 0.5,
                                          color = "grey40", margin = ggplot2::margin(b = 10)),
    plot.caption  = ggplot2::element_text(size = 8, hjust = 1, color = "grey50"),
    legend.position = "right",
    plot.margin   = ggplot2::margin(20, 20, 20, 20)
  )

参考文献