Шкала bin-ordinal

Шкала bin-ordinal применяется для отображения данных, предварительно разбитых на интервалы (бины), когда каждый интервал должен интерпретироваться как отдельная категориальная позиция на оси, но при этом сохраняется упорядоченность и равномерное распределение по пространству.

Ключевая идея заключается в том, что непрерывная числовая область преобразуется в набор дискретных диапазонов фиксированного размера, а затем каждый диапазон отображается как отдельное значение ordinal-основы, но с геометрией, характерной для равномерной сетки.


Биннинг как основа шкалы

Перед применением шкалы Vega-Lite выполняет операцию разбиения данных на интервалы:

{
  "data": {"values": [...]},
  "mark": "bar",
  "encoding": {
    "x": {
      "field": "value",
      "bin": {"maxbins": 10},
      "type": "quantitative"
    },
    "y": {"aggregate": "count"}
  }
}

На этом этапе формируются:

  • нижняя граница бина
  • верхняя граница бина
  • метка диапазона
  • индекс бина

Результатом становится не исходное число, а структурированная сущность интервала.


Смысл шкалы bin-ordinal

Шкала bin-ordinal используется, когда необходимо:

  • отобразить бины как упорядоченные категории
  • сохранить равномерную ширину визуальных элементов
  • исключить искажения, характерные для непрерывной шкалы
  • обеспечить стабильную сетку размещения

В отличие от стандартной ordinal-шкалы, где категории могут быть произвольными, здесь порядок и шаг строго производны от числового диапазона.


Механизм отображения

После биннинга Vega-Lite формирует виртуальный домен:

[bin0, bin1, bin2, ... binN]

Каждый элемент домена соответствует диапазону значений:

0–10
10–20
20–30
...

Шкала bin-ordinal отображает эти интервалы в равномерные позиции на оси.


Пример базовой конфигурации

{
  "data": {"values": [
    {"v": 1}, {"v": 2}, {"v": 2}, {"v": 5},
    {"v": 7}, {"v": 9}, {"v": 10}, {"v": 12}
  ]},
  "mark": "bar",
  "encoding": {
    "x": {
      "field": "v",
      "type": "quantitative",
      "bin": {"maxbins": 5},
      "axis": {"title": "Интервалы значений"}
    },
    "y": {
      "aggregate": "count",
      "type": "quantitative"
    }
  }
}

Внутренне Vega-Lite применяет шкалу:

scale: { type: "bin-ordinal" }

Отличие от ordinal и linear шкал

ordinal

  • работает с произвольными категориями
  • не предполагает числовой структуры
  • порядок задаётся явно или автоматически

linear

  • непрерывная числовая шкала
  • нет дискретизации
  • используется для точных измерений

bin-ordinal

  • промежуточная форма
  • основана на числовом диапазоне
  • отображает интервалы как категории
  • сохраняет равные шаги между бинами

Геометрия отображения

Шкала bin-ordinal фактически ведёт себя как band-scale с фиксированным шагом:

  • каждому бину соответствует одинаковая ширина
  • промежутки между бинами отсутствуют или минимальны
  • положение вычисляется как индекс * step

Это обеспечивает визуальную стабильность гистограмм.


Настройка maxbins и влияние на шкалу

Параметр maxbins управляет количеством интервалов:

"bin": {"maxbins": 20}

При увеличении:

  • уменьшается ширина каждого интервала
  • увеличивается детализация распределения
  • возрастает нагрузка на визуальное восприятие

При уменьшении:

  • бины становятся шире
  • распределение упрощается
  • исчезают мелкие вариации данных

Формирование подписей оси

Подписи оси в bin-ordinal обычно представляют:

  • нижнюю границу интервала
  • диапазон в формате a–b
  • округлённые значения

Пример:

0–10 | 10–20 | 20–30 | 30–40

Vega-Lite может автоматически форматировать подписи, используя правила биннинга и параметр nice.


Управление визуальной плотностью

Шкала bin-ordinal чувствительна к параметрам:

  • paddingInner
  • paddingOuter
  • bandPadding
  • rangeStep

Пример настройки:

"encoding": {
  "x": {
    "field": "value",
    "type": "quantitative",
    "bin": {"maxbins": 15},
    "axis": {"labelAngle": -45}
  }
}

При большом количестве бинов поворот подписей становится критичным для читаемости.


Использование в гистограммах

Типичный сценарий применения:

{
  "mark": "bar",
  "encoding": {
    "x": {
      "field": "score",
      "type": "quantitative",
      "bin": true
    },
    "y": {
      "aggregate": "count"
    }
  }
}

Шкала bin-ordinal обеспечивает:

  • равномерные столбцы
  • корректное позиционирование интервалов
  • отсутствие перекрытий

Стабильность при изменении данных

Одним из свойств bin-ordinal является устойчивость отображения:

  • при фиксированном maxbins структура шкалы сохраняется
  • добавление новых данных не ломает сетку
  • диапазоны пересчитываются, но логика деления остаётся прежней

Это важно для сравнительных визуализаций.


Сортировка и порядок интервалов

Порядок бинов строго определяется числовой осью:

min → max

Попытка изменить сортировку через sort не влияет на физический порядок шкалы, так как он вычисляется из биннинга.


Сочетание с трансформациями

Шкала bin-ordinal часто используется вместе с:

  • aggregate
  • stack
  • filter
  • impute

Пример комбинирования:

{
  "transform": [
    {"filter": "datum.value > 0"}
  ],
  "mark": "bar",
  "encoding": {
    "x": {"field": "value", "bin": {"maxbins": 8}},
    "y": {"aggregate": "count"}
  }
}

Поведение при неравномерных данных

При распределениях с выбросами:

  • бины могут концентрироваться в узких диапазонах
  • крайние интервалы становятся более широкими
  • шкала сохраняет равномерное размещение, несмотря на статистическую асимметрию

Практическое значение шкалы

Bin-ordinal используется как механизм, который:

  • превращает непрерывные данные в структурированные группы
  • обеспечивает визуальную эквивалентность интервалов
  • устраняет проблемы масштабирования линейных осей при гистограммах
  • создаёт предсказуемую сетку представления распределений