Шкала symlog

Шкала symlog (symmetrical logarithmic scale) представляет собой комбинацию линейного и логарифмического отображения значений. Она сохраняет чувствительность к малым величинам около нуля и одновременно обеспечивает сжатие больших значений, характерное для логарифмической шкалы. Основная особенность — симметричное поведение относительно нуля: отрицательные и положительные значения обрабатываются одинаковым образом.


Математическая модель symlog

Функция преобразования задаётся кусочно:

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

Типичная форма:

  • f(x) = x при |x| ≤ c
  • f(x) = sign(x) * (c + log(|x| / c)) при |x| > c

где:

  • c — параметр перехода (constant)
  • sign(x) сохраняет знак числа

Таким образом достигается:

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

Поведение шкалы и смысл параметра constant

Параметр constant определяет ширину линейной зоны около нуля.

  • малое значение constant → почти логарифмическая шкала
  • большое значение constant → почти линейная шкала

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


Применение symlog в визуализации

Шкала особенно полезна при работе с данными, содержащими:

  • значения разных порядков величин
  • отрицательные и положительные числа одновременно
  • выбросы (outliers), существенно превышающие основную массу данных

Типичные сценарии:

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

Реализация в Vega

В 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

В 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:

  • отсутствует явное объявление scales массива
  • параметры шкалы встроены в encoding
  • автоматически создаются оси и домены

Отличия symlog от log и linear

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

  • равномерное распределение
  • плохо подходит для больших диапазонов
  • не выделяет выбросы

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

  • хорошо сжимает большие значения
  • не работает с отрицательными числами
  • не отображает ноль

symlog

  • объединяет преимущества обеих
  • поддерживает отрицательные значения
  • сохраняет ноль и окрестность
  • сложнее интерпретируется визуально

Поведение около нуля

Ключевая особенность symlog — отсутствие разрыва в нуле.

На практике это означает:

  • значения -c … +c отображаются почти линейно
  • переход к логарифмическому режиму происходит плавно
  • визуально создаётся “переходная зона”

При анализе данных это позволяет не терять структуру малых значений, что часто критично.


Пример данных и эффект визуализации

Рассмотрим массив:

[
  -1000, -200, -50, -5, -1, 0, 1, 5, 50, 200, 1000
]

На линейной шкале:

  • малые значения сжимаются
  • большие доминируют

На логарифмической:

  • отрицательные значения исчезают

На symlog:

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

Параметр clamp и его влияние

clamp: true ограничивает значения шкалы диапазоном domain.

Поведение:

  • значения вне домена фиксируются на границах
  • предотвращает выход за визуальные пределы
  • полезно при динамических данных

Работа с доменом

Домен может быть:

  • автоматическим (по данным)
  • фиксированным
  • вычисленным через transform

Пример фиксированного домена:

"domain": [-1000, 1000]

Важно учитывать, что symlog требует симметричного подхода при анализе распределений, иначе визуализация может смещать восприятие.


Взаимодействие с форматированием осей

Оси symlog требуют аккуратного форматирования:

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

Пример настройки:

{
  "axis": {
    "format": ".2s"
  }
}

Ограничения и особенности интерпретации

Несмотря на универсальность, symlog имеет ряд особенностей:

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

Использование в комбинированных визуализациях

Symlog часто применяется совместно с:

  • scatter plots (точечные диаграммы)
  • line charts (временные ряды)
  • residual plots (остатки моделей)
  • distribution plots (распределения)

В сложных дашбордах она позволяет:

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