Шкала band и point для дискретных осей

В системах визуализации Vega и Vega-Lite шкалы типа band и point предназначены для работы с дискретными (категориальными) осями, где значения не образуют непрерывного числового диапазона. Эти шкалы формируют основу для построения столбчатых диаграмм, точечных графиков, группированных представлений и любых визуализаций, где данные представлены наборами категорий.


Общая модель дискретных шкал

Дискретная шкала преобразует набор категорий в позиции на числовой оси. В отличие от линейных или логарифмических шкал, здесь отсутствует непрерывность: каждое значение домена соответствует отдельной позиции.

Основные характеристики:

  • domain — список категорий (строки или категориальные значения)
  • range — числовой диапазон пикселей (обычно ширина или высота области построения)
  • padding / spacing — управление расстоянием между элементами
  • alignment — выравнивание внутри доступного диапазона

В Vega-Lite основная настройка дискретной шкалы осуществляется через параметр scale.type.


Шкала band

Принцип работы

Шкала band распределяет категории по равномерным отрезкам (полосам), каждая из которых имеет фиксированную ширину. Это ключевой механизм для построения столбчатых диаграмм, где каждая категория занимает целую «полосу».

Формально:

  • каждая категория отображается в интервал [x, x + bandwidth]
  • bandwidth вычисляется автоматически
  • между полосами может быть задан отступ

Поведение band-шкалы

Характерные свойства:

  • каждая категория занимает отдельную область (band)
  • поддерживается внутренняя ширина элемента (bandwidth)
  • возможны внешние и внутренние отступы (paddingInner, paddingOuter)
  • используется для визуальных элементов с шириной или высотой

Пример конфигурации band-шкалы

{
  "data": { "values": [
    { "category": "A", "value": 28 },
    { "category": "B", "value": 55 },
    { "category": "C", "value": 43 }
  ] },
  "mark": "bar",
  "encoding": {
    "x": {
      "field": "category",
      "type": "nominal",
      "scale": { "type": "band" }
    },
    "y": {
      "field": "value",
      "type": "quantitative"
    }
  }
}

В этом случае каждая категория получает собственную полосу, а столбец занимает всю доступную ширину внутри неё.


Параметры band-шкалы

paddingInner

Определяет долю пространства между полосами относительно их ширины.

  • значение 0 → полосы соприкасаются
  • значение ближе к 1 → увеличенные промежутки

paddingOuter

Определяет отступы по краям диапазона.

align

Управляет смещением полос внутри диапазона:

  • 0 — выравнивание по началу
  • 0.5 — центрирование
  • 1 — выравнивание по концу

Использование bandwidth

Одно из ключевых свойств band-шкалы — доступ к bandwidth.

Он применяется для:

  • построения bar charts
  • расчёта ширины прямоугольников
  • группировки элементов внутри категории

Пример концептуального использования:

  • ширина столбца = bandwidth
  • позиция x = scale(category)

Шкала point

Принцип работы

Шкала point отображает категории в виде точечных позиций без выделения области ширины. Каждое значение домена получает одну координату.

В отличие от band:

  • отсутствует bandwidth
  • элементы центрируются в точке
  • используется для маркеров, линий и scatter-представлений

Поведение point-шкалы

Характерные особенности:

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

Пример конфигурации point-шкалы

{
  "data": { "values": [
    { "category": "A", "value": 28 },
    { "category": "B", "value": 55 },
    { "category": "C", "value": 43 }
  ] },
  "mark": "point",
  "encoding": {
    "x": {
      "field": "category",
      "type": "nominal",
      "scale": { "type": "point" }
    },
    "y": {
      "field": "value",
      "type": "quantitative"
    }
  }
}

Каждая категория размещается в одной координате без выделенной ширины.


Сравнение band и point

Геометрическая модель

  • band: интервал на оси
  • point: дискретная координата

Визуальное поведение

  • band формирует «ячейки»
  • point формирует «узлы»

Применимость

Сценарий band point
столбчатые диаграммы да нет
точечные графики нет да
группировка категорий да ограничено
ось с маркерами редко да

Внутреннее вычисление координат

Band scale

Преобразование категории:

x = scale(category)
width = bandwidth

Где bandwidth вычисляется как:

bandwidth = (range_end - range_start) / domain_size - padding

(упрощённая модель)


Point scale

Преобразование категории:

x = scale(category)

Дополнительно применяется центрирование:

x = x + step / 2

где step — расстояние между соседними категориями.


Поведение при изменении размера диапазона

Band

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

Point

  • изменяется расстояние между точками
  • размеры маркеров не затрагиваются
  • структура остаётся неизменной

Padding и визуальная плотность

Band

Регулирует плотность заполнения оси:

  • высокий padding → разреженная диаграмма
  • низкий padding → плотная компоновка

Point

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


Типичные ошибки использования

Band вместо point

  • использование band для scatter-представлений приводит к визуальной перегруженности
  • отсутствие явной ширины нарушает интерпретацию

Point вместо band

  • попытка строить bar chart на point шкале приводит к наложению элементов
  • отсутствие bandwidth делает невозможным корректное отображение столбцов

Комбинирование с другими шкалами

В Vega-Lite дискретные шкалы часто комбинируются:

  • band + linear (bar charts)
  • point + linear (scatter plots)
  • band + color (grouped bars)
  • point + size (categorical scatter encoding)

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

Обе шкалы зависят от порядка категорий:

  • сохранение входного порядка данных
  • явная сортировка через sort

Пример:

"scale": {
  "type": "band",
  "domain": ["C", "A", "B"]
}

Порядок напрямую влияет на визуальное расположение.


Особенности интерполяции

Дискретные шкалы не поддерживают интерполяцию в классическом смысле:

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

Практическое разделение областей применения

band используется для:

  • bar charts
  • grouped bar charts
  • heatmap по категориальной оси
  • диаграмм с шириной элементов

point используется для:

  • scatter plots с категориальной осью
  • dot plots
  • размещения маркеров
  • линейных графиков с категориальной дискретизацией