Шкала symlog (symmetrical logarithmic scale)
представляет собой комбинацию линейного и логарифмического отображения
значений. Она сохраняет чувствительность к малым величинам около нуля и
одновременно обеспечивает сжатие больших значений, характерное для
логарифмической шкалы. Основная особенность — симметричное поведение
относительно нуля: отрицательные и положительные значения обрабатываются
одинаковым образом.
Функция преобразования задаётся кусочно:
Типичная форма:
f(x) = x при |x| ≤ cf(x) = sign(x) * (c + log(|x| / c)) при
|x| > cгде:
c — параметр перехода (constant)sign(x) сохраняет знак числаТаким образом достигается:
Параметр constant определяет ширину линейной зоны около
нуля.
constant → почти логарифмическая
шкалаconstant → почти линейная шкалаОсобенность заключается в том, что именно этот параметр определяет баланс между детализацией малых значений и сжатием больших.
Шкала особенно полезна при работе с данными, содержащими:
Типичные сценарии:
В Vega шкала задаётся через объект scale с типом
symlog.
{
"scales": [
{
"name": "yScale",
"type": "symlog",
"domain": {"data": "table", "field": "value"},
"range": "height",
"constant": 10
}
]
}
Ключевые параметры:
type: "symlog" — включает симметричное
логарифмированиеdomain — входные данныеrange — диапазон координатconstant — размер линейной зоны около нуляnice — округление границ шкалы (опционально)clamp — ограничение значений в пределах диапазонаПри использовании symlog-оси важно учитывать:
Пример оси:
{
"axes": [
{
"scale": "yScale",
"orient": "left"
}
]
}
В Vega-Lite синтаксис более компактный. Шкала задаётся внутри encoding:
{
"data": {"url": "data.csv"},
"mark": "line",
"encoding": {
"y": {
"field": "value",
"type": "quantitative",
"scale": {
"type": "symlog",
"constant": 5
}
},
"x": {
"field": "date",
"type": "temporal"
}
}
}
Особенности Vega-Lite:
Ключевая особенность symlog — отсутствие разрыва в нуле.
На практике это означает:
При анализе данных это позволяет не терять структуру малых значений, что часто критично.
Рассмотрим массив:
[
-1000, -200, -50, -5, -1, 0, 1, 5, 50, 200, 1000
]
На линейной шкале:
На логарифмической:
На symlog:
clamp: true ограничивает значения шкалы диапазоном
domain.
Поведение:
Домен может быть:
Пример фиксированного домена:
"domain": [-1000, 1000]
Важно учитывать, что symlog требует симметричного подхода при анализе распределений, иначе визуализация может смещать восприятие.
Оси symlog требуют аккуратного форматирования:
Пример настройки:
{
"axis": {
"format": ".2s"
}
}
Несмотря на универсальность, symlog имеет ряд особенностей:
constant существенно влияет на визуальную
картинуSymlog часто применяется совместно с:
В сложных дашбордах она позволяет: