コロプレス図は、ニュース、政策レポート、企業のダッシュボードでもっともよく目にする主題図です。得票差で塗られた選挙地図、感染率で塗られたCOVID地図、所得で塗られたGDP地図を見たことがあれば、すでにコロプレス図を読んでいます。
この記事では、コロプレス図とは何か、いつ使うべきか、よくあるミス、そしてベクタータイルAPIを使った本番品質のコロプレス図の作り方を解説します。
一文での定義
コロプレス図は、地図上の各領域を、その領域で測定された単一の数値に応じて、大きさを表すカラースケールで塗り分けたものです。
語源はギリシャ語の khoros(領域)と plethos(多数)。1820年代のフランスの統計学者にさかのぼり、それ以来、主題地図の主役であり続けています。
コロプレス図の例
代表的な用途:
- 国、州、郵便番号ごとの人口密度
- 選挙区ごとの選挙結果、色の濃さで得票差を表現
- 国ごとの一人当たりGDP、対数スケールを使うことが多い
- 地域ごとの失業率
- 郡ごとの人口10万人当たりのCOVID感染率
- 地区ごとの平均不動産価格
- 国勢調査区ごとのブロードバンド普及率
- 農業地域ごとの作物収量
共通点は、データがあらかじめ定義された領域ごとに1つの数値である、という点です。
コロプレス図 vs ヒートマップ
両者はよく混同されますが、違いは重要です。
コロプレス図はあらかじめ定義された領域を必要とします。データは集計済み。各領域は1色。境界線そのものがメッセージの一部です。
ヒートマップは点データを必要とします。密度はビニングやカーネル平滑化で計算され、出力は行政境界を無視した連続的なグラデーションになります。領域比較ではなく、クラスター発見に使います。
郵便番号ごとに1つの値ならコロプレス図、GPSポイントの集まりならヒートマップです。
コロプレス図の作り方
3つの要素:
- 境界ジオメトリ。 塗り分けたい領域のGeoJSONポリゴン(またはベクタータイルレイヤ)一式。各領域に安定した識別子(ISO国コード、USの州FIPSコード、EUのNUTSコード、郵便番号など)を持たせます。
- 領域ごとの値。 同じ識別子をキーにしたシンプルなJSONオブジェクトまたはCSV。
- 両者を結合するレンダラ。 モダンなWebマップライブラリ(MapLibre GL、Mapbox GL、deck.gl、OpenLayers)は、feature-stateやプロパティ式を使ってランタイムにデータを境界へ結合できます。
MapLibre GL JSでの概念的なパターンは次のとおりです:
map.addSource('regions', {
type: 'vector',
url: 'https://api.mapatlas.xyz/v1/tiles/regions.json',
});
map.addLayer({
id: 'regions-fill',
type: 'fill',
source: 'regions',
'source-layer': 'regions',
paint: {
'fill-color': [
'interpolate',
['linear'],
['feature-state', 'value'],
0, '#f7fbff',
50, '#6baed6',
100, '#08306b',
],
'fill-opacity': 0.8,
},
});
// Push your data to each feature at runtime
for (const [regionId, value] of Object.entries(yourData)) {
map.setFeatureState(
{ source: 'regions', sourceLayer: 'regions', id: regionId },
{ value }
);
}
境界タイルは一度だけ取得し、データが変わるたびに再スタイリングされます。サーバ側で再レンダリングする必要はありません。
正しいカラースケールの選び方
3つのルール:
単方向データにはシーケンシャル。 単一色相で薄から濃へ。低から高に進む量で、意味のある中央値がない場合(人口、所得、率など)に使います。
双方向データにはダイバージング。 ニュートラルな中央値と両側へ広がる2色(赤と青、茶とティールなど)。ゼロや平均が意味を持ち、値が両側に分布する場合(前年比成長、選挙差、平均からの偏差など)に使います。
レインボースケールは避ける。 人間の知覚が均一に追えない順序を暗示しますし、色覚多様性のあるユーザーには機能しません。ColorBrewer(colorbrewer2.org)が、地図屋によって検証されたコロプレス図用パレットの標準リファレンスです。
よくある失敗は階級数が多すぎることです。5〜7が最適で、それ以上だと隣り合う色の区別がつかなくなります。
階級分けの問題
スケールが決まったら、階級の境界をどこに引くかを決める必要があります:
- 等間隔(Equal interval)。 値域を均等に分割。一様分布のデータには有効、外れ値があると破綻します。
- 分位(Quantile)。 各階級に同数の領域が入る。すべての色を確実に出したいときに便利ですが、差の大きさを隠してしまうことがあります。
- 自然分類(Jenks)。 階級内分散を最小化。もっともデータドリブンなデフォルトです。
- 手動。 階級の境界に意味がある場合(税率の区分、人口学的閾値など)。
この選択は地図が語るストーリーに大きく影響します。きちんとしたレポートでは分類方法を明記してください。
よくある落とし穴
面積バイアス。 面積が広く低密度な領域が視覚的に支配します。得票差で塗ったアメリカ大統領選のコロプレス図は、農村部の郡が巨大なため、ほぼ赤一色に見えてしまいます。カートグラムやドット密度マップで補正します。
比率ではなく生のカウント。 「州ごとのCOVID症例数」の地図は、結局のところ人口分布の地図です。絶対値を伝えたい場合を除き、必ず人口、面積、または別の分母で正規化してください。
ミスリーディングなスケール。 分位スケールは実際の差が小さくても地図を派手に見せ、等間隔スケールは外れ値があると地図を平坦に見せます。問いに合わせて分類方法を選んでください。
欠損データ。 データのない領域をグレーで示すのか、表示しないのか、ゼロと同じ色にするのかは、最初に決めてください。それぞれ読み手の解釈が変わります。
別のチャートを選ぶべきとき
領域ごとに複数の変数がある場合、コロプレス図は情報を平坦化してしまいます。次のような選択肢があります:
- スモールマルチプル。 変数ごとに1枚ずつコロプレス図を並べたグリッド。
- 二変量コロプレス。 2変数を2次元のカラーグリッドで表現。読みにくいですが、機能すれば強力です。
- カートグラム。 領域の大きさを値に応じて歪めます。面積バイアスが大きいときに有効。
- 地図上のバーチャート。 結局のところデータは表で、地図は装飾という場合もあります。
地図づくりはコミュニケーションです。コロプレス図は数あるツールのひとつにすぎません。
MapAtlasの位置づけ
Dynamic Maps API は、国、地域、郵便番号の境界をベクタータイルソースとして提供し、上のMapLibreスニペットのようにランタイムで自分のデータを使ってスタイル付けできます。境界はEUホスト、バージョン付き、標準識別子(ISO 3166、NUTS、各国の郵便番号体系)にきれいに結合できるよう設計されています。
領域ごとの集計値を表示する必要があるページ(郵便番号ごとの不動産価格、地域ごとの配送コスト、地域ごとの売上)では、GeoEnrich API が同じ境界IDをキーに領域ごとの値を返すので、地図と表で同じ結合がそのまま使えます。主題地図全般の背景は Thematic Map Guide にまとめています。
よくある質問
コロプレス図とは何ですか?
コロプレス図は、地理的な領域(国、州、郵便番号、国勢調査区など)を、その領域で測定された統計値に応じて塗り分ける主題図の一種です。色の濃淡が値を表し、通常は色が濃いほど値が高く、薄いほど値が低くなります。人口密度、選挙結果、一人当たりGDP、失業率など、行政境界で集計される量を可視化する標準的な手法です。
コロプレス図とヒートマップの違いは?
コロプレス図は、あらかじめ定義された領域(国、郵便番号、地区など)を、各領域ごとに集計された値で塗り分けます。ヒートマップは、点データの密度を空間上で連続的に表示し、行政境界には従いません。データが領域ごとにすでに集計されている場合(州ごとの票数、郵便番号ごとの売上など)はコロプレス図、点の集まりがどこに密集しているかを見たい場合(犯罪発生、顧客の位置、センサー値など)はヒートマップを使います。
コロプレス図はどんなときに使えばよいですか?
データが領域ごとに1つの数値で、領域の面積が概ね同程度か、面積や人口で正規化できる場合に向いています。良い例としては、郡ごとのブロードバンド普及率、地域ごとの人口10万人当たりのCOVID感染者数、郵便番号ごとの平均家賃などです。領域の面積差が極端に大きい場合(人口が少なくても農村部の広い領域が視覚的に支配してしまう)や、領域ごとに複数の変数がある場合(スモールマルチプルや別のチャートを使う)は避けたほうがよいでしょう。
コロプレス図はどうやって作りますか?
必要なのは3つです。領域の境界ジオメトリ(GeoJSONポリゴン)、安定したIDで紐付けられた各領域の値、そして両者を結合してカラースケールを適用するレンダラです。代表的なスタックは、MapLibre GLまたはMapbox GLとfill-color式の組み合わせ、deck.gl GeoJsonLayerとgetFillColor、静的SVGならD3.jsとd3-geo、あるいはホスト型の動的マップAPIです。MapAtlas Dynamic Maps APIは国、地域、郵便番号の境界タイルを配信しており、ランタイムに自分のデータでスタイル付けできます。
コロプレス図に適したカラースケールは?
自然なゼロ点を持つ単方向データには、単一色相のシーケンシャルスケール(例:薄い青から濃い青)を使います。意味のある中央値の周りで値が分散するデータ(選挙の得票差、前年比など)には、ダイバージング(発散)スケール(例:赤から白から青)を使います。レインボースケールは避けてください。人間が均一に知覚できない順序を暗示し、色覚多様性のあるユーザーには機能しません。ColorBrewerはコロプレス図用パレットの標準リファレンスです。

