Трансформация partition

Трансформация partition в Vega и Vega-Lite относится к классу иерархических преобразований данных, предназначенных для раскладки древовидных структур в двумерном пространстве визуализации. Основная задача этого механизма — преобразование вложенной структуры (дерево) в координатную систему, пригодную для отрисовки диаграмм типа partition chart, icicle chart и частично sunburst-подобных представлений.

Иерархические данные в контексте этой трансформации представляются в виде узлов, где каждый узел может содержать потомков. Такая структура естественным образом описывается JSON-объектами с полем children, либо через предварительно сформированную иерархию.

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

  • x0, x1 — горизонтальные границы
  • y0, y1 — вертикальные границы

Эти значения формируют прямоугольники, которые далее используются примитивами визуализации Vega.


Базовая идея алгоритма partition

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

Вес узла определяется одним из следующих способов:

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

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


Подготовка иерархии

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

{
  "data": {"name": "tree"},
  "transform": [
    {
      "type": "hierarchy",
      "children": "children"
    },
    {
      "type": "partition"
    }
  ]
}

Структура исходных данных обычно выглядит следующим образом:

{
  "name": "root",
  "children": [
    {
      "name": "A",
      "value": 10
    },
    {
      "name": "B",
      "children": [
        {
          "name": "B1",
          "value": 5
        },
        {
          "name": "B2",
          "value": 15
        }
      ]
    }
  ]
}

Параметры трансформации partition

В Vega и Vega-Lite поведение partition регулируется набором параметров, влияющих на геометрию и распределение пространства.

Размер области (size)

Размер задаёт общий прямоугольник, в пределах которого выполняется разбиение:

{
  "type": "partition",
  "size": [1, 1]
}

Часто используется нормализованное пространство [0, 1], после чего масштабирование выполняется на уровне mark.


Метод раскладки

Partition по сути фиксирует стратегию деления пространства: вертикальную или горизонтальную последовательность уровней иерархии.

  • по оси X раскладываются узлы одного уровня
  • по оси Y отражается глубина дерева

Таким образом формируется классическая “лестничная” структура.


Поле значения (value)

Поле значения определяет вклад узла в площадь:

{
  "type": "partition",
  "field": "value"
}

Если поле не задано, используется агрегированная сумма дочерних узлов.


Сортировка узлов

Сортировка влияет на визуальную структуру и компактность:

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

Сортировка критически влияет на читаемость диаграммы, особенно при большом числе ветвей.


Выходные данные трансформации

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

  • x0, x1
  • y0, y1
  • depth — уровень в дереве
  • value — агрегированное значение

Эти поля используются mark-компонентами Vega для построения прямоугольников:

{
  "mark": "rect",
  "encoding": {
    "x": {"field": "x0"},
    "x2": {"field": "x1"},
    "y": {"field": "y0"},
    "y2": {"field": "y1"}
  }
}

Связь partition с другими иерархическими трансформациями

В Vega-Lite partition входит в набор иерархических layout-алгоритмов:

  • treemap — плотная упаковка прямоугольников
  • pack — круговая упаковка
  • partition — строгая иерархическая сегментация

Ключевое отличие partition заключается в сохранении структуры уровней без попытки оптимизировать плотность размещения. Это делает его предпочтительным для визуализаций, где важна структура, а не максимальная эффективность использования пространства.


Работа с глубиной и масштабированием

Ось Y в partition отражает глубину дерева. Каждому уровню иерархии соответствует фиксированная высота сегмента:

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

При этом масштабирование по вертикали может быть линейным или нормализованным.


Пример полной конфигурации Vega-Lite

{
  "data": {"name": "tree"},
  "transform": [
    {
      "type": "hierarchy",
      "children": "children"
    },
    {
      "type": "partition",
      "field": "value",
      "size": [400, 300]
    }
  ],
  "mark": "rect",
  "encoding": {
    "x": {"field": "x0"},
    "x2": {"field": "x1"},
    "y": {"field": "y0"},
    "y2": {"field": "y1"}
  }
}

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


Особенности распределения пространства

Partition строго придерживается принципа:

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

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


Поведение при отсутствии значений

Если узлы не содержат числовых значений, используется стратегия равномерного распределения:

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

Масштабирование и постобработка координат

Координаты x0, x1, y0, y1 обычно находятся в нормализованном пространстве. Для реального отображения применяются шкалы:

  • линейное масштабирование по ширине
  • линейное масштабирование по высоте
  • инверсия оси Y при необходимости соответствия экранным координатам

Vega применяет эти преобразования на уровне scales и signals, не вмешиваясь в результат partition.


Взаимодействие с фильтрацией и агрегацией

Partition может применяться после предварительных трансформаций:

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

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


Ограничения подхода partition

Несмотря на универсальность, модель имеет ограничения:

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