Хороплетная карта строится на фундаментальном принципе: географические области (полигоны) окрашиваются в зависимости от значения некоторой переменной, привязанной к этим областям. В основе лежит операция соединения атрибутивных данных с геометрическими описаниями пространственных объектов. В контексте декларативных систем визуализации, таких как Vega и Vega-Lite, этот процесс формализуется через набор трансформаций данных, проекций и масштабов.
Географическая часть хороплета обычно задаётся в формате GeoJSON или TopoJSON. Эти форматы описывают:
GeoJSON представляет каждый объект независимо, тогда как TopoJSON хранит общие границы один раз, уменьшая размер данных и устраняя дублирование.
В Vega/Vega-Lite геоданные обычно подключаются как отдельный источник данных:
{
"data": {
"url": "countries.topojson",
"format": {
"type": "topojson",
"feature": "countries"
}
}
}
Ключевой момент заключается в том, что геометрия сама по себе не содержит смысловой нагрузки (например, ВВП, плотности населения, уровня доходов). Она лишь определяет форму.
Вторая часть хороплета — таблица значений:
| country_id | value |
|---|---|
| KZ | 87 |
| RU | 65 |
| CN | 120 |
Эта таблица является независимой от геометрии и содержит только числовую или категориальную информацию. Именно она определяет цветовую окраску регионов.
В Vega-Lite основной механизм объединения геометрии и атрибутов —
lookup transform. Он позволяет связать два источника данных
по ключу.
{
"transform": [
{
"lookup": "id",
"from": {
"data": {
"url": "data.csv"
},
"key": "country_id",
"fields": ["value"]
}
}
]
}
Здесь:
id — поле в геоданных (например, код страны);country_id — поле в таблице значений;value — извлекаемое числовое значение.Результатом становится расширенный геометрический объект, содержащий как координаты, так и статистику.
Географические координаты (долгота и широта) необходимо преобразовать в координаты экрана. Это делает географическая проекция.
"projection": {
"type": "mercator"
}
Наиболее распространённые типы:
mercator — стандартная веб-карта;equalEarth — более сбалансированное искажение
площадей;albersUsa — специализированная проекция США;naturalEarth1 — компромисс между формой и
площадью.Проекция влияет на визуальную корректность сравнения площадей, что критично для хороплетов, поскольку человеческое восприятие сильно реагирует на площадь заливки.
После объединения данных и геометрии применяется цветовое
кодирование. В Vega-Lite это реализуется через scale в
encoding.
"encoding": {
"color": {
"field": "value",
"type": "quantitative",
"scale": {
"scheme": "blues"
}
}
}
Основные типы шкал:
Выбор шкалы определяет интерпретацию данных. Например, логарифмическая шкала используется при сильной асимметрии распределения.
Минимальный пример включает три компонента: геоданные, трансформацию и визуальное кодирование.
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": 800,
"height": 400,
"data": {
"url": "world.topojson",
"format": {
"type": "topojson",
"feature": "countries"
}
},
"transform": [
{
"lookup": "id",
"from": {
"data": {
"url": "values.csv"
},
"key": "country_id",
"fields": ["value"]
}
}
],
"projection": {
"type": "equalEarth"
},
"mark": "geoshape",
"encoding": {
"color": {
"field": "value",
"type": "quantitative",
"scale": {
"scheme": "viridis"
}
}
}
}
В этом описании отсутствует императивная логика: вся карта описывается декларативно как набор правил преобразования данных.
Маркер geoshape является специализированным типом
визуального элемента. Он интерпретирует входные данные как
геометрические объекты, а не как точки или линии.
В Vega существует более низкоуровневый контроль, где геометрия может быть выражена через:
shapepathgraticulesphereВ Vega-Lite эти детали абстрагированы, но остаются доступными через расширенные конфигурации.
Хороплеты часто требуют предварительной обработки данных:
Пример нормализации через transform:
{
"transform": [
{
"calculate": "datum.value / datum.population",
"as": "per_capita"
}
]
}
После этого визуализация работает уже не с абсолютными значениями, а с относительными показателями, что значительно повышает корректность сравнения регионов.
Хороплетные карты требуют дискретизации непрерывных данных. Основные стратегии:
Равные интервалы (quantize) Делят диапазон на фиксированное количество классов.
Квантили (quantile) Каждый класс содержит одинаковое количество объектов.
Пользовательские пороги Заданные вручную границы.
В Vega-Lite это задаётся через scale:
"scale": {
"type": "quantile",
"scheme": "magma"
}
Выбор метода влияет на визуальное восприятие распределения данных и может либо скрывать, либо подчёркивать неравномерность.
Хороплет редко существует в изоляции. Часто поверх него добавляются:
В Vega это реализуется через layer:
{
"layer": [
{
"mark": "geoshape",
"encoding": {
"color": {"field": "value", "type": "quantitative"}
}
},
{
"mark": {
"type": "geoshape",
"stroke": "black",
"fill": null
}
}
]
}
Слой границ отделяет визуальные области, повышая читаемость карты.
Ключевой технический аспект хороплета — стабильность ключа соединения. Используются:
Несовпадение ключей приводит к «потере» регионов, которые остаются неокрашенными.
При работе с большими геоданными возникают ограничения:
TopoJSON часто используется как оптимизация, поскольку уменьшает объем данных и ускоряет декодирование.
Хороплетная карта кодирует данные через:
Однако цвет остаётся доминирующим каналом, что накладывает ограничения:
В декларативной модели Vega геометрия не является статичной. Она определяется функцией от данных:
geometry = f(geographic coordinates)
color = g(data value)
projection = h(lat, lon)
Связка этих функций формирует итоговую визуальную структуру, где карта становится результатом последовательных преобразований, а не ручного рисования объектов.