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

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

В системах визуализации данных Vega и Vega-Lite логарифмическая шкала является встроенным типом масштабирования и широко применяется при построении осей и преобразовании значений в координатное пространство.


Логарифмическая шкала строится на преобразовании исходного значения через логарифм:

[ y = _b(x)]

где:

    1. — исходное значение,
    1. — основание логарифма (обычно 10, e или 2),
    1. — преобразованное значение.

Ключевое свойство такого преобразования — переход от мультипликативной структуры к аддитивной:

[ (x y) = (x) + (y)]

Это свойство делает логарифмическую шкалу особенно полезной для:

  • финансовых данных (капитализация, рост рынка),
  • научных измерений (звук, свет, химические концентрации),
  • сетевых метрик (latency, throughput),
  • распределений с heavy-tail поведением.

Логарифмическая шкала в Vega-Lite

В Vega-Lite логарифмическая шкала задаётся через параметр scale.type.

Базовая конфигурация

{
  "data": {"url": "data.csv"},
  "mark": "line",
  "encoding": {
    "x": {"field": "x", "type": "quantitative"},
    "y": {
      "field": "value",
      "type": "quantitative",
      "scale": {
        "type": "log"
      }
    }
  }
}

В этом случае Vega-Lite автоматически преобразует значения value по логарифмическому закону перед отрисовкой.


Особенности поведения log scale

Запрет нулевых и отрицательных значений

Логарифм не определён для:

  • (x = 0)
  • (x < 0)

Поэтому данные должны быть заранее очищены или трансформированы.

Типичные стратегии:

  • фильтрация значений ≤ 0
  • смещение данных (например, x + 1)
  • использование симметричной логарифмической шкалы (symlog в некоторых системах, но не стандартно в Vega-Lite)

Настройка основания логарифма

Хотя чаще используется основание 10, Vega-Lite позволяет задать base:

{
  "scale": {
    "type": "log",
    "base": 2
  }
}

Изменение основания влияет на:

  • плотность делений на оси
  • визуальную «агрессивность» сжатия данных
  • интерпретацию роста

Логарифмическая шкала в Vega (низкоуровневый слой)

В Vega логарифмическая шкала задаётся через объект scale в более явной форме:

{
  "scales": [
    {
      "name": "yScale",
      "type": "log",
      "domain": {"data": "table", "field": "value"},
      "range": "height",
      "base": 10
    }
  ]
}

Здесь:

  • domain — исходный диапазон данных,
  • range — диапазон пикселей,
  • type: "log" — активирует логарифмическое преобразование.

Влияние на оси (axes)

Логарифмическая шкала существенно изменяет поведение осей.

Деления оси

Обычная линейная шкала:

  • равные интервалы

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

  • деления соответствуют степеням основания

Пример для base = 10:

  • 1, 10, 100, 1000

Промежуточные значения (2, 3, 5) визуально сжимаются ближе к меньшим степеням.


Форматирование тиков

В Vega-Lite можно управлять отображением:

{
  "axis": {
    "format": ".0e"
  }
}

или более читаемый вариант:

{
  "axis": {
    "labelExpr": "format(datum.value, '.1s')"
  }
}

Это особенно важно при больших диапазонах значений.


Пример: рост значений по порядкам величины

{
  "data": {
    "values": [
      {"t": 1, "v": 1},
      {"t": 2, "v": 10},
      {"t": 3, "v": 100},
      {"t": 4, "v": 1000},
      {"t": 5, "v": 10000}
    ]
  },
  "mark": "line",
  "encoding": {
    "x": {"field": "t", "type": "ordinal"},
    "y": {
      "field": "v",
      "type": "quantitative",
      "scale": {"type": "log", "base": 10}
    }
  }
}

Без логарифмической шкалы рост визуально стремится к вертикальной асимптоте, тогда как логарифм делает динамику равномерной.


Комбинация с преобразованиями данных

В Vega-Lite логарифмическая шкала может комбинироваться с трансформациями:

Фильтрация нулей

{
  "transform": [
    {"filter": "datum.v > 0"}
  ]
}

Вычисление логарифма вручную

{
  "transform": [
    {
      "calculate": "log(datum.v) / log(10)",
      "as": "log_v"
    }
  ]
}

В этом случае можно использовать линейную шкалу, но логарифм уже предрассчитан.


Сравнение log scale и linear scale

Характеристика Линейная шкала Логарифмическая шкала
Интервалы равные пропорциональные логарифму
Малые значения сжаты расширены
Большие значения растянуты сжаты
Подходит для равномерных данных экспоненциальных распределений

Поведение при визуализации распределений

Логарифмическая шкала особенно важна при анализе:

  • степенных законов (power-law),
  • экспоненциального роста,
  • лог-нормальных распределений.

На линейной шкале такие данные часто выглядят «скученными» вблизи нуля, тогда как логарифмическое преобразование раскрывает внутреннюю структуру распределения.


Логарифмическая шкала в интерактивных графиках

В интерактивных спецификациях Vega-Lite логарифмическая шкала влияет на:

  • tooltips (показывают исходные значения, не преобразованные),
  • hover-интеракции,
  • brush selection (выбор диапазона в лог-пространстве).

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


Ограничения и нюансы

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

Практическое применение в аналитических дашбордах

В связке с Vega-Lite логарифмическая шкала используется в:

  • мониторинге серверных метрик (latency, request rate)
  • финансовых графиках (капитализация, доходность)
  • научных измерениях (интенсивность сигналов)
  • визуализации распределений пользователей и событий

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