最終更新:2026-03-30
rayshader を使わず、ggplot2
で東京都(島嶼部除く)の人口分布を2Dコロプレスマップとして描画する。geom_sf() で描画し、人口を Hiroshige
パレットで色付けする。| データ | 説明 |
|---|---|
| Kontur Population(日本) | 400m解像度の人口データ(GeoPackage形式) |
| 国土数値情報 行政区域(東京都) | 東京都の行政区域ポリゴン(Shapefile形式) |
| 項目 | 仕様 |
|---|---|
| ファイル形式 | GeoPackage (.gpkg) |
| 空間解像度 | 400m(H3解像度8) |
| 座標参照システム | EPSG:3857(Pseudo-Mercator) |
| 集計基準年 | 2023年 |
| カバレッジ | 世界全域 |
kontur_population_JP_20231101.gpkg(45.8MB)をダウンロードして作業フォルダに配置する。N03-20250101_13_GML/
フォルダを作業フォルダに配置する。library(sf) # ベクターデータの入出力・空間演算
library(ggplot2) # データの可視化・地図描画
library(MetBrewer) # 美術館にインスパイアされたカラーパレット
library(scales) # 凡例ラベルの数値フォーマット(comma など)
# 国土数値情報の行政区域データ(東京都)を読み込む
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
# 市区町村ポリゴンを 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)
)
Kontur Population Data https://www.kontur.io/portfolio/population-dataset/
HDX Japan Population Data https://data.humdata.org/organization/kontur
国土数値情報ダウンロードサービス(行政区域)https://nlftp.mlit.go.jp/ksj/