Поле reverse

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

Параметр reverse отвечает за переворот направления отображения шкалы. В зависимости от контекста он может:

  • менять направление числовой оси (от большего к меньшему),
  • инвертировать порядок категорий,
  • изменять направление визуального роста значений,
  • влиять на компоновку графических элементов.

Ключевой принцип заключается в том, что reverse не изменяет данные, а только интерпретацию координатной системы.

reverse в шкалах (scale.reverse)

Наиболее распространённое использование связано с масштабами.

Логика работы

При reverse: true:

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

Это особенно важно для:

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

Пример шкалы

{
  "data": { "values": [
    { "x": 1, "y": 10 },
    { "x": 2, "y": 20 },
    { "x": 3, "y": 30 }
  ]},
  "mark": "line",
  "encoding": {
    "x": { "field": "x", "type": "quantitative" },
    "y": {
      "field": "y",
      "type": "quantitative",
      "scale": { "reverse": true }
    }
  }
}

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

reverse в осях (axis.reverse)

В Vega и Vega-Lite поведение осей может быть изменено независимо от шкал.

Отличие от scale.reverse

  • scale.reverse инвертирует математическое отображение значений,
  • axis.reverse инвертирует визуальное направление оси.

Это различие важно:

  • scale влияет на вычисление координат,
  • axis влияет на отрисовку компонентов (делений, подписей, направления роста).

Пример оси

{
  "encoding": {
    "x": {
      "field": "category",
      "type": "ordinal",
      "axis": {
        "reverse": true
      }
    },
    "y": {
      "field": "value",
      "type": "quantitative"
    }
  }
}

Категории будут отображаться справа налево вместо стандартного слева направо.

reverse в сортировке данных

Хотя формально reverse не является полноценной частью sort, он часто применяется совместно с сортировкой как логическая инверсия порядка.

В Vega-Lite сортировка может быть задана через:

  • ascending (по возрастанию),
  • descending (по убыванию).

reverse в этом контексте фактически эквивалентен переключению направления сортировки, но реализуется на уровне визуального слоя.

Пример сортировки с визуальной инверсией

{
  "encoding": {
    "y": {
      "field": "category",
      "type": "ordinal",
      "sort": "x",
      "scale": { "reverse": true }
    },
    "x": {
      "field": "value",
      "type": "quantitative"
    }
  }
}

Здесь порядок категорий сначала сортируется по значению, а затем инвертируется визуально.

Геометрический смысл reverse

В координатной системе браузерной визуализации (SVG/Canvas):

  • ось X растёт слева направо,
  • ось Y растёт сверху вниз.

reverse позволяет:

  • компенсировать экранную систему координат,
  • привести графики к математической системе (Y снизу вверх),
  • создавать зеркальные представления данных.

reverse в многослойных визуализациях

В сложных композициях (layered charts, facet, concat):

  • reverse может применяться локально к каждой шкале,
  • или глобально через конфигурацию scales.

Пример слоёв

{
  "layer": [
    {
      "mark": "bar",
      "encoding": {
        "x": { "field": "a", "type": "quantitative" },
        "y": {
          "field": "b",
          "type": "quantitative",
          "scale": { "reverse": true }
        }
      }
    },
    {
      "mark": "line",
      "encoding": {
        "x": { "field": "a", "type": "quantitative" },
        "y": { "field": "c", "type": "quantitative" }
      }
    }
  ]
}

Здесь только один слой инвертирует ось Y, что создаёт различие в интерпретации данных между слоями.

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

Для категориальных данных reverse:

  • меняет порядок категорий,
  • не влияет на числовую интерполяцию,
  • работает как перестановка массива домена.

Пример:

{
  "encoding": {
    "x": {
      "field": "category",
      "type": "nominal",
      "scale": { "reverse": true }
    }
  }
}

Категории отображаются в обратном порядке относительно исходного набора или заданного sort.

Взаимодействие reverse и padding шкал

При использовании padding (отступов шкалы):

  • сначала вычисляется домен,
  • затем применяется padding,
  • затем применяется reverse.

Это важно, поскольку:

  • reverse не влияет на размер диапазона,
  • но меняет направление распределения значений внутри него.

reverse и логические шкалы времени

Для временных данных:

  • reverse позволяет отображать хронологию «с конца к началу»,
  • используется в логах, аналитике событий, мониторинге.
{
  "encoding": {
    "x": {
      "field": "timestamp",
      "type": "temporal",
      "scale": { "reverse": true }
    }
  }
}

Такой подход полезен при визуализации последних событий слева или сверху.

Различия реализации Vega и Vega-Lite

Vega-Lite

  • декларативный уровень,
  • reverse задаётся в encoding.scale или axis,
  • автоматически транслируется в Vega-spec.

Vega

  • более низкоуровневый контроль,
  • reverse может применяться в scale напрямую,
  • больше гибкости в комбинировании трансформаций.

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

Частые ошибки использования reverse

  • применение reverse вместо корректной сортировки,
  • одновременное использование reverse и descending без понимания итогового порядка,
  • ожидание изменения данных вместо изменения отображения,
  • конфликт reverse между axis и scale при несогласованной конфигурации.

Влияние reverse на читаемость графиков

Использование reverse влияет на:

  • восприятие направления роста,
  • интерпретацию трендов,
  • соответствие привычным системам координат.

В аналитических визуализациях оно часто применяется для:

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