Математические функции в системе выражений Vega представляют собой
основу вычислительного слоя, встроенного в спецификации визуализаций.
Они используются внутри сигналов, вычисляемых полей (transforms), шкал,
а также в логике условных выражений. В Vega-Lite доступ к ним
осуществляется через transform calculate, который
компилируется в выражения Vega.
Язык выражений Vega основан на безопасном подмножестве JavaScript-подобного синтаксиса. Он поддерживает:
+, -,
*, /, %)Математические функции доступны глобально и применяются без импортов.
Функция:
abs(x)
Возвращает модуль числа.
Пример:
{"expr": "abs(datum.value)"}
Используется для нормализации отклонений, расчёта расстояний и симметричных метрик.
round(x)
floor(x)
ceil(x)
round — математическое округлениеfloor — внизceil — вверхПример:
{"expr": "floor(datum.price)"}
Визуальные применения:
clamp(x, min, max)
Функция фиксирует значение внутри интервала.
Пример:
{"expr": "clamp(datum.value, 0, 100)"}
Используется для:
Поддерживаются стандартные функции, работающие в радианах.
sin(x)
cos(x)
tan(x)
Пример генерации волны:
{"expr": "sin(datum.x * 0.1) * 50"}
asin(x)
acos(x)
atan(x)
atan2(y, x)
Особое значение имеет atan2, позволяющая вычислять угол
вектора:
{"expr": "atan2(datum.y, datum.x)"}
Используется в:
exp(x)
Возвращает ( e^x ).
Применение:
{"expr": "exp(datum.value / 10)"}
log(x)
log10(x)
Используются для:
Пример:
{"expr": "log(datum.value)"}
pow(x, y)
Возведение в степень.
Пример:
{"expr": "pow(datum.value, 2)"}
Типичные сценарии:
min(a, b, ...)
max(a, b, ...)
Пример:
{"expr": "max(datum.a, datum.b)"}
extent(array)
Возвращает [min, max].
Используется в:
if(condition, valueTrue, valueFalse)
Пример:
{"expr": "if(datum.value > 0, datum.value, 0)"}
Применяется для:
isValid(x)
Позволяет исключить null и NaN.
{"expr": "isValid(datum.value) ? datum.value : 0"}
toNumber(x)
Используется при обработке строковых данных:
{"expr": "toNumber(datum.value)"}
sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2))
В Vega часто выражается через композицию:
{"expr": "sqrt(pow(datum.x1 - datum.x2, 2) + pow(datum.y1 - datum.y2, 2))"}
Применение:
В Vega математические функции часто комбинируются со шкалами:
{
"expr": "scale('x', datum.value) + sin(datum.value * 0.1) * 10"
}
Здесь происходит смешивание:
В Vega-Lite математические функции не используются напрямую в спецификации визуализации. Вместо этого применяется transform:
{
"calculate": "sin(datum.x * 0.2) * 50",
"as": "y"
}
{
"transform": [
{
"calculate": "pow(datum.value, 2) + 10",
"as": "computed"
}
]
}
После компиляции Vega-Lite преобразует выражение в полноценный Vega expression.
Сложные выражения строятся через вложенность:
{"expr": "clamp(sin(datum.x) * 100 + pow(datum.y, 2), 0, 500)"}
Характерные паттерны:
Математические функции в Vega выполняются интерпретатором выражений, поэтому важны:
Пример упрощения:
До:
{"expr": "pow(datum.x, 2) + pow(datum.x, 2)"}
После:
{"expr": "2 * pow(datum.x, 2)"}
datumПример контекста:
{"expr": "datum.value * sin(signal('time') * 0.01)"}
Математические функции работают как над данными, так и над сигналами:
{"expr": "sin(signal('mouseX') * 0.05)"}
Это позволяет строить интерактивные модели, где математика управляет визуальным состоянием напрямую.