В Vega-Lite и Vega визуальные элементы часто размещаются не в
непрерывной числовой шкале, а внутри дискретных «полос» (bands), которые
формируются шкалами типа band и point. Такие
шкалы разбивают ось на равные сегменты, каждый из которых соответствует
категориальному значению. Именно внутри этих сегментов и работает поле
band в кодировании.
Ключевая идея band-модели заключается в том, что каждая категория получает не точку на оси, а область фиксированной ширины. Эта область называется bandwidth. Внутри неё можно позиционировать маркеры с точной настройкой смещения.
При использовании шкалы:
{
"x": { "field": "category", "type": "ordinal", "scale": { "type": "band" } }
}
каждому значению category соответствует сегмент оси.
Однако сам маркер может быть смещён внутри этого сегмента, и именно для
этого используется bandPosition.
Поле bandPosition задаёт относительное положение
элемента внутри band-ячейки. Оно принимает значения от 0 до
1:
0 — левый (или верхний) край band0.5 — центр band1 — правый (или нижний) край bandПример:
{
"mark": "circle",
"encoding": {
"x": {
"field": "category",
"type": "ordinal",
"scale": { "type": "band" },
"bandPosition": 0.5
},
"y": { "field": "value", "type": "quantitative" }
}
}
Здесь точки всегда центрируются внутри категориальной полосы, что особенно важно для:
Band-основанные шкалы предоставляют не только позицию, но и ширину сегмента. Это используется при отрисовке прямоугольников, столбиков и интервалов:
x — начало категорииx2 — конец категорииbandwidth — ширина сегментаПри этом bandPosition позволяет перейти от «границ
категории» к внутреннему позиционированию маркера, не теряя связи с
категорией.
В многослойных графиках band-позиционирование часто применяется для:
Поле binned отражает состояние данных, уже прошедших
процедуру биннинга (разбиения непрерывной шкалы на интервалы). В
Vega-Lite оно сигнализирует системе, что данные уже агрегированы по
диапазонам, и повторная операция bin не требуется.
Биннинг преобразует непрерывные значения в интервалы:
Каждый интервал становится отдельной категорией, часто используемой в гистограммах.
Обычно Vega-Lite сам выполняет биннинг через:
{
"bin": true,
"field": "value"
}
Однако в некоторых случаях данные уже подготовлены заранее. Тогда используется:
{
"field": "bin_start",
"type": "quantitative",
"bin": "binned"
}
или логически эквивалентное указание:
{
"binned": true
}
При установке binned: true система интерпретирует поля
не как исходные значения, а как границы интервалов. Обычно используются
пары:
x и x2 — начало и конец интервала по оси
Xy и y2 — аналогично по оси YЭто принципиально меняет семантику визуализации: вместо точек отображаются отрезки или прямоугольники, соответствующие диапазонам.
{
"data": { "name": "table" },
"mark": "bar",
"encoding": {
"x": {
"field": "bin_start",
"type": "quantitative",
"bin": "binned"
},
"x2": { "field": "bin_end" },
"y": { "field": "count", "type": "quantitative" }
}
}
Здесь:
bin_start и bin_end задают границы
интервалаbinned сообщает, что данные уже агрегированыВажно различать два уровня обработки:
bin transform (автоматический биннинг)
bin_start, bin_end,
count)binned encoding (уже готовые бины)
При binned данные:
x +
x2, y + y2)Это важно для:
Несмотря на различие семантики, band и
binned могут пересекаться в одном графике:
band управляет положением внутри категориальной
ячейкиbinned управляет интервалами количественных данныхТипичный сценарий:
Такая комбинация используется в:
Внутренний движок Vega обрабатывает binned как флаг
семантического типа данных. Это влияет на:
В отличие от bandPosition, который работает на уровне
геометрии, binned работает на уровне структуры данных и
трансформаций.