В системах визуализации данных на основе Vega и Vega-Lite преобразование значений из данных в визуальные координаты выполняется через шкалы (scale). Ключевая задача шкалы — отобразить числовой или категориальный domain в визуальный range. Для точного управления этим отображением используются параметры ограничения границ: domainMin, domainMax, rangeMin, rangeMax.
Любая шкала в Vega/Vega-Lite формально задаётся отображением:
[ : ]
Пример типичного линейного масштабирования:
{
"scale": {
"type": "linear",
"domain": [0, 100],
"range": [0, 500]
}
}
Здесь значение 50 из domain будет отображено в 250 на range.
Параметры domainMin и domainMax задают жёсткие или полу-жёсткие ограничения на минимальное и максимальное значение входного диапазона.
Они используются в случаях, когда:
domainMin задаёт нижнюю границу domain.
Если минимальное значение данных меньше domainMin, оно игнорируется.
Пример:
{
"scale": {
"type": "linear",
"domainMin": 0
}
}
Если данные содержат значения [-20, 10, 30], фактический
domain будет интерпретирован как [0, 30].
domainMax задаёт верхнюю границу domain.
{
"scale": {
"type": "linear",
"domainMax": 100
}
}
При данных [10, 50, 200] итоговый domain будет ограничен
как [10, 100].
Комбинация задаёт фиксированный интервал:
{
"scale": {
"type": "linear",
"domainMin": 0,
"domainMax": 100
}
}
В этом случае любые данные вне диапазона [0, 100] будут
«обрезаны» при расчёте domain.
Параметры rangeMin и rangeMax управляют тем, как вычисленный domain отображается в визуальные координаты.
Они используются для:
rangeMin задаёт нижнюю границу визуального диапазона.
Пример для оси Y (в пикселях):
{
"scale": {
"type": "linear",
"rangeMin": 20
}
}
Это означает, что минимальное значение domain не будет отображаться ниже 20px.
rangeMax задаёт верхнюю границу визуального диапазона.
{
"scale": {
"type": "linear",
"rangeMax": 480
}
}
Максимальное значение данных будет ограничено 480px.
{
"scale": {
"type": "linear",
"rangeMin": 0,
"rangeMax": 600
}
}
Это создаёт фиксированную визуальную область отображения шкалы.
При построении шкалы происходит двухступенчатое преобразование:
Формируется domain:
Выполняется линейное или нелинейное преобразование в range:
{
"scale": {
"type": "linear",
"domainMin": 0,
"domainMax": 100,
"rangeMin": 0,
"rangeMax": 300
}
}
Результат:
Если данные выходят за пределы domainMin/domainMax:
Если вычисленный range выходит за пределы rangeMin/rangeMax:
В Vega/Vega-Lite существует параметр clamp, который:
В отличие от него:
При сравнении нескольких графиков:
{
"scale": {
"type": "linear",
"domainMin": 0,
"domainMax": 100
}
}
Оси остаются одинаковыми независимо от данных.
{
"scale": {
"type": "linear",
"rangeMin": 50,
"rangeMax": 450
}
}
Используется для создания отступов под подписи и заголовки.
{
"scale": {
"type": "linear",
"domainMin": 0,
"domainMax": 1000
}
}
Сильные выбросы не искажают визуализацию.
Наиболее предсказуемое поведение:
Особенности:
Для категориальных шкал:
При создании сложных дашбордов параметры ограничения:
При одновременном использовании нескольких ограничений:
Типичная полная конфигурация:
{
"scale": {
"type": "linear",
"domain": "data",
"domainMin": 0,
"domainMax": 100,
"rangeMin": 0,
"rangeMax": 400,
"clamp": true
}
}
Такой набор параметров задаёт полностью контролируемое преобразование данных в визуальные координаты с фиксированными границами и предсказуемым отображением.