Биннинг в Vega-Lite представляет собой механизм дискретизации
непрерывных количественных данных для их последующего отображения в виде
гистограмм, тепловых карт, ступенчатых распределений и других форм
визуализации, требующих разбиения числовой оси на интервалы. Поле
bin в канале кодирования определяет, как именно выполняется
это разбиение, какие параметры влияют на ширину интервалов, их
количество и границы.
В Vega-Lite биннинг задаётся внутри описания канала (обычно
x, y, реже color,
size) через свойство:
bin: true — включение биннинга с параметрами по
умолчаниюbin: { ... } — детальная настройка процесса
разбиенияПри активации биннинга исходное числовое поле преобразуется в два производных поля:
Эти поля используются системой компиляции для построения прямоугольных элементов, чаще всего в гистограммах.
Простейшая конфигурация:
{
"mark": "bar",
"encoding": {
"x": {
"field": "value",
"type": "quantitative",
"bin": true
},
"y": {
"aggregate": "count",
"type": "quantitative"
}
}
}
В данном случае Vega-Lite автоматически выбирает стратегию разбиения
диапазона значений поля value, формируя интервалы
одинаковой ширины.
Наиболее часто используемая настройка — maxbins,
ограничивающая количество интервалов:
"bin": {
"maxbins": 20
}
Алгоритм выбирает оптимальный шаг разбиения так, чтобы количество корзин не превышало указанное значение, сохраняя при этом «читаемость» шкалы.
Особенность заключается в том, что фактическое количество бин может
отличаться от maxbins, так как применяется эвристика выбора
«красивых» чисел (1, 2, 5, 10 и их степени).
Для более строгого контроля используется параметр step,
задающий фиксированную ширину интервала:
"bin": {
"step": 10
}
При таком подходе диапазон значений делится на равные отрезки длиной 10 единиц.
Параметр anchor определяет точку привязки сетки
биннинга:
"bin": {
"step": 10,
"anchor": 0
}
Если anchor установлен в 0, интервалы будут выглядеть
как:
Если anchor смещён, сетка сдвигается, что критично при работе с временными или смещёнными числовыми распределениями.
Параметр extent задаёт явный диапазон данных, который
должен быть разбит на корзины:
"bin": {
"extent": [0, 100]
}
Это особенно важно при визуализации наборов данных с выбросами или неполными значениями, когда автоматическое определение диапазона может привести к нестабильным результатам.
Для нелинейных распределений применяется параметр base,
определяющий основание логарифмического биннинга:
"bin": {
"base": 2
}
В этом случае интервалы формируются по степеням двойки, что полезно при анализе данных с экспоненциальным ростом или степенными распределениями.
Параметр divide управляет разбиением диапазона на
неравномерные сегменты:
"bin": {
"divide": [5, 2]
}
Он позволяет создавать комбинированные шкалы, где шаги внутри диапазона изменяются по заданной схеме, что используется реже, но важно для специализированных аналитических задач.
При компиляции Vega-Lite преобразует биннинг в Vega-конструкции, добавляя в поток данных новые поля:
field_bin_startfield_bin_endИли их эквиваленты, зависящие от имени исходного поля.
Пример внутреннего представления:
{
"transform": [
{
"bin": true,
"field": "value",
"as": ["value_start", "value_end"]
}
]
}
Эти поля затем используются для позиционирования геометрических примитивов, чаще всего прямоугольников.
Типичная структура гистограммы строится на сочетании биннинга и агрегирования:
{
"mark": "bar",
"encoding": {
"x": {
"field": "value",
"type": "quantitative",
"bin": {
"maxbins": 30
}
},
"y": {
"aggregate": "count",
"type": "quantitative"
}
}
}
Каждый бар соответствует одному интервалу, а высота определяется количеством элементов, попавших в этот интервал.
При использовании биннинга Vega-Lite автоматически переключает ось с непрерывной на интервальную интерпретацию. Вместо точечных значений используются диапазоны:
При этом подписи осей могут отображать либо левую границу, либо
середину интервала, в зависимости от конфигурации axis.
Биннинг может комбинироваться с другими трансформациями Vega-Lite:
aggregate — подсчёт количества элементов в каждом
интервалеfilter — предварительное ограничение набора данныхcalculate — создание производных значений до
биннингаПорядок применения трансформаций критичен: биннинг выполняется до агрегирования.
При работе с биннингом возникают несколько важных особенностей:
[a, b)Хотя биннинг чаще применяется к числам, Vega-Lite поддерживает его и для временных шкал:
"bin": {
"maxbins": 12
}
В этом случае интервалы могут соответствовать месяцам или другим временным единицам, в зависимости от диапазона данных и внутренней эвристики.
Биннинг в Vega-Lite выполняет функцию промежуточного слоя между непрерывными данными и дискретной визуальной моделью. Он позволяет:
Механизм остаётся декларативным: описание биннинга не требует указания алгоритма разбиения, а задаёт только ограничения и предпочтения, оставляя конкретную реализацию системе компиляции Vega-Lite.