Поле domainMin, domainMax, rangeMin, rangeMax

В системах визуализации данных на основе Vega и Vega-Lite преобразование значений из данных в визуальные координаты выполняется через шкалы (scale). Ключевая задача шкалы — отобразить числовой или категориальный domain в визуальный range. Для точного управления этим отображением используются параметры ограничения границ: domainMin, domainMax, rangeMin, rangeMax.


Семантика domain и range в системе масштабов

Любая шкала в Vega/Vega-Lite формально задаётся отображением:

[ : ]

  • domain — входные значения (данные)
  • range — выходные значения (экранные координаты, цвета, размеры)

Пример типичного линейного масштабирования:

{
  "scale": {
    "type": "linear",
    "domain": [0, 100],
    "range": [0, 500]
  }
}

Здесь значение 50 из domain будет отображено в 250 на range.


domainMin и domainMax: фиксация границ входных данных

Назначение

Параметры domainMin и domainMax задают жёсткие или полу-жёсткие ограничения на минимальное и максимальное значение входного диапазона.

Они используются в случаях, когда:

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

Поведение domainMin

domainMin задаёт нижнюю границу domain.

Если минимальное значение данных меньше domainMin, оно игнорируется.

Пример:

{
  "scale": {
    "type": "linear",
    "domainMin": 0
  }
}

Если данные содержат значения [-20, 10, 30], фактический domain будет интерпретирован как [0, 30].


Поведение domainMax

domainMax задаёт верхнюю границу domain.

{
  "scale": {
    "type": "linear",
    "domainMax": 100
  }
}

При данных [10, 50, 200] итоговый domain будет ограничен как [10, 100].


Совместное использование domainMin и domainMax

Комбинация задаёт фиксированный интервал:

{
  "scale": {
    "type": "linear",
    "domainMin": 0,
    "domainMax": 100
  }
}

В этом случае любые данные вне диапазона [0, 100] будут «обрезаны» при расчёте domain.


rangeMin и rangeMax: контроль визуального диапазона

Назначение

Параметры rangeMin и rangeMax управляют тем, как вычисленный domain отображается в визуальные координаты.

Они используются для:

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

rangeMin

rangeMin задаёт нижнюю границу визуального диапазона.

Пример для оси Y (в пикселях):

{
  "scale": {
    "type": "linear",
    "rangeMin": 20
  }
}

Это означает, что минимальное значение domain не будет отображаться ниже 20px.


rangeMax

rangeMax задаёт верхнюю границу визуального диапазона.

{
  "scale": {
    "type": "linear",
    "rangeMax": 480
  }
}

Максимальное значение данных будет ограничено 480px.


Совместное использование rangeMin и rangeMax

{
  "scale": {
    "type": "linear",
    "rangeMin": 0,
    "rangeMax": 600
  }
}

Это создаёт фиксированную визуальную область отображения шкалы.


Взаимодействие domainMin/domainMax и rangeMin/rangeMax

При построении шкалы происходит двухступенчатое преобразование:

  1. Формируется domain:

    • учитываются данные
    • применяются domainMin и domainMax
  2. Выполняется линейное или нелинейное преобразование в range:

    • применяется rangeMin и rangeMax

Пример полного сценария

{
  "scale": {
    "type": "linear",
    "domainMin": 0,
    "domainMax": 100,
    "rangeMin": 0,
    "rangeMax": 300
  }
}

Результат:

  • 0 → 0
  • 50 → 150
  • 100 → 300

Особенности поведения при выходе данных за пределы

Ограничение domain

Если данные выходят за пределы domainMin/domainMax:

  • значения обрезаются при вычислении domain
  • влияние выбросов уменьшается
  • визуализация становится стабильнее

Ограничение range

Если вычисленный range выходит за пределы rangeMin/rangeMax:

  • элементы могут выходить за пределы canvas
  • требуется дополнительное управление clip или padding

Отличие от padding и clamp

domainMin/domainMax vs padding

  • domainMin/domainMax — фиксируют абсолютные границы
  • padding — расширяет domain на основе данных

rangeMin/rangeMax vs padding

  • rangeMin/rangeMax — фиксируют область отображения
  • padding — добавляет внутренние отступы в компоновке

clamp (сравнение)

В Vega/Vega-Lite существует параметр clamp, который:

  • ограничивает результат масштабирования
  • применяется после вычисления scale

В отличие от него:

  • domainMin/domainMax влияют на входные данные
  • rangeMin/rangeMax влияют на выходные координаты

Типовые сценарии применения

Стабилизация осей графиков

При сравнении нескольких графиков:

{
  "scale": {
    "type": "linear",
    "domainMin": 0,
    "domainMax": 100
  }
}

Оси остаются одинаковыми независимо от данных.


Фиксация области рисования

{
  "scale": {
    "type": "linear",
    "rangeMin": 50,
    "rangeMax": 450
  }
}

Используется для создания отступов под подписи и заголовки.


Обрезка выбросов

{
  "scale": {
    "type": "linear",
    "domainMin": 0,
    "domainMax": 1000
  }
}

Сильные выбросы не искажают визуализацию.


Поведение в различных типах шкал

Линейные шкалы

Наиболее предсказуемое поведение:

  • domainMin/domainMax задают числовые границы
  • rangeMin/rangeMax задают пиксельные координаты

Логарифмические шкалы

Особенности:

  • domainMin должен быть > 0
  • domainMax влияет на степень сжатия

Шкалы категорий

Для категориальных шкал:

  • domainMin/domainMax практически не применяются
  • rangeMin/rangeMax задают позиции категорий

Влияние на композицию визуализаций

При создании сложных дашбордов параметры ограничения:

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

Поведение при конфликте параметров

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

  • domainMin/Max имеют приоритет над автоматическим вычислением domain
  • rangeMin/Max переопределяют вычисленную область отображения
  • padding и autosize могут изменять итоговое поведение

Практическая структура конфигурации шкалы

Типичная полная конфигурация:

{
  "scale": {
    "type": "linear",
    "domain": "data",
    "domainMin": 0,
    "domainMax": 100,
    "rangeMin": 0,
    "rangeMax": 400,
    "clamp": true
  }
}

Такой набор параметров задаёт полностью контролируемое преобразование данных в визуальные координаты с фиксированными границами и предсказуемым отображением.