Поле align для band-шкал

В band-шкалах Vega и Vega-Lite параметр align определяет смещение набора равномерных полос (band) внутри доступного диапазона шкалы. Он влияет на то, как распределяются категории по оси при использовании дискретного отображения данных, особенно в сочетании с rangeStep или автоматически вычисляемым шагом.

Ключевая идея: align управляет горизонтальным (или вертикальным) сдвигом всей сетки band-значений внутри диапазона шкалы без изменения их ширины.


Механика band-шкалы

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

  • позицию начала band
  • ширину band (обычно step)
  • внутренние и внешние отступы (paddingInner, paddingOuter)

При этом весь набор band-значений может быть выровнен внутри общего диапазона координат.


Семантика align

Параметр align принимает значение в диапазоне от 0 до 1:

  • 0 — выравнивание по левому краю диапазона
  • 0.5 — центрирование внутри диапазона
  • 1 — выравнивание по правому краю

Фактически align задаёт коэффициент смещения всей band-сетки относительно начала координатной области.

Формальное поведение

Если диапазон шкалы задан как [min, max], а ширина набора band-значений меньше полного диапазона, то:

  • позиция первого band смещается внутри свободного пространства
  • смещение пропорционально (max - min - totalBandWidth) * align

Влияние на визуализацию

Изменение align особенно заметно в следующих случаях:

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

Пример поведения

  • align: 0 — столбцы «прижаты» к началу оси
  • align: 0.5 — столбцы визуально центрированы
  • align: 1 — столбцы смещены к концу оси

Связь с rangeStep

В Vega-Lite band-шкалы часто используют rangeStep, который задаёт фиксированный шаг между категориями.

При наличии rangeStep:

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

Без rangeStep (например, при range: "width"):

  • поведение зависит от вычисленного масштаба
  • align всё равно влияет на смещение, но эффект менее очевиден

Взаимодействие с paddingInner и paddingOuter

align работает совместно с параметрами отступов:

  • paddingInner — расстояние между категориями внутри шкалы
  • paddingOuter — отступы по краям диапазона

Их комбинация формирует итоговую структуру распределения:

  • paddingOuter определяет базовый «воздух» по краям
  • paddingInner регулирует плотность категорий
  • align смещает всю структуру внутри оставшегося пространства

При этом:

  • увеличение paddingOuter уменьшает визуальный эффект align
  • при высоком paddingInner смещение становится менее заметным

Пример Vega-Lite спецификации

Центрированное выравнивание (align = 0.5)

{
  "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",
        "align": 0.5,
        "paddingInner": 0.2,
        "paddingOuter": 0.1
      }
    },
    "y": {
      "field": "value",
      "type": "quantitative"
    }
  }
}

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


Левое выравнивание (align = 0)

{
  "encoding": {
    "x": {
      "field": "category",
      "type": "nominal",
      "scale": {
        "type": "band",
        "align": 0,
        "paddingInner": 0.1,
        "paddingOuter": 0.2
      }
    }
  }
}

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


Правое выравнивание (align = 1)

{
  "encoding": {
    "x": {
      "field": "category",
      "type": "nominal",
      "scale": {
        "type": "band",
        "align": 1,
        "paddingInner": 0.1,
        "paddingOuter": 0.2
      }
    }
  }
}

Категории смещаются к правому краю, свободное пространство концентрируется слева.


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

При динамическом количестве категорий эффект align меняется нелинейно:

  • при малом числе категорий свободное пространство велико, смещение выражено сильно
  • при большом числе категорий пространство сокращается, и влияние align стремится к нулю
  • при плотной упаковке band (paddingInner → 0) смещение становится почти незаметным

Особенности в вертикальных и горизонтальных осях

align одинаково работает для обеих ориентаций:

  • при горизонтальной оси (x scale) смещение происходит по горизонтали
  • при вертикальной оси (y scale) смещение происходит по вертикали

Это позволяет выравнивать визуальные блоки диаграмм в сложных компоновках, например:

  • small multiples
  • facet-графики
  • комбинированные панели

Практическое значение в компоновке визуализаций

align используется не как инструмент «красоты», а как механизм управления плотностью и балансом композиции:

  • центрирование диаграммы при неполном заполнении области
  • создание симметрии между несколькими графиками
  • выравнивание столбцов относительно визуальных ориентиров
  • устранение «прилипания» к краям контейнера при малом объёме данных

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

  • попытка компенсировать align вместо корректировки paddingOuter
  • использование крайних значений (0 или 1) без учёта контекста композиции
  • смешивание ожиданий от align с поведением domain или range
  • игнорирование влияния rangeStep, приводящее к непредсказуемому визуальному смещению

Поведение по умолчанию

При отсутствии явного задания align используется значение, обеспечивающее визуально сбалансированное распределение (обычно 0.5), что соответствует центрированию band-группы внутри доступного диапазона.