Трансформация partition в Vega и Vega-Lite относится к классу иерархических преобразований данных, предназначенных для раскладки древовидных структур в двумерном пространстве визуализации. Основная задача этого механизма — преобразование вложенной структуры (дерево) в координатную систему, пригодную для отрисовки диаграмм типа partition chart, icicle chart и частично sunburst-подобных представлений.
Иерархические данные в контексте этой трансформации представляются в
виде узлов, где каждый узел может содержать потомков. Такая структура
естественным образом описывается JSON-объектами с полем
children, либо через предварительно сформированную
иерархию.
Ключевой результат применения partition — вычисление координат прямоугольных областей для каждого узла:
x0, x1 — горизонтальные границыy0, y1 — вертикальные границыЭти значения формируют прямоугольники, которые далее используются примитивами визуализации Vega.
Алгоритм 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
}
]
}
]
}
В Vega и Vega-Lite поведение partition регулируется набором параметров, влияющих на геометрию и распределение пространства.
Размер задаёт общий прямоугольник, в пределах которого выполняется разбиение:
{
"type": "partition",
"size": [1, 1]
}
Часто используется нормализованное пространство [0, 1],
после чего масштабирование выполняется на уровне mark.
Partition по сути фиксирует стратегию деления пространства: вертикальную или горизонтальную последовательность уровней иерархии.
Таким образом формируется классическая “лестничная” структура.
Поле значения определяет вклад узла в площадь:
{
"type": "partition",
"field": "value"
}
Если поле не задано, используется агрегированная сумма дочерних узлов.
Сортировка влияет на визуальную структуру и компактность:
Сортировка критически влияет на читаемость диаграммы, особенно при большом числе ветвей.
После выполнения partition каждый узел получает набор координат, которые определяют его прямоугольник:
x0, x1y0, y1depth — уровень в деревеvalue — агрегированное значениеЭти поля используются mark-компонентами Vega для построения прямоугольников:
{
"mark": "rect",
"encoding": {
"x": {"field": "x0"},
"x2": {"field": "x1"},
"y": {"field": "y0"},
"y2": {"field": "y1"}
}
}
В Vega-Lite partition входит в набор иерархических layout-алгоритмов:
Ключевое отличие partition заключается в сохранении структуры уровней без попытки оптимизировать плотность размещения. Это делает его предпочтительным для визуализаций, где важна структура, а не максимальная эффективность использования пространства.
Ось Y в partition отражает глубину дерева. Каждому уровню иерархии соответствует фиксированная высота сегмента:
При этом масштабирование по вертикали может быть линейным или нормализованным.
{
"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 обычно находятся в нормализованном пространстве. Для
реального отображения применяются шкалы:
Vega применяет эти преобразования на уровне scales и signals, не вмешиваясь в результат partition.
Partition может применяться после предварительных трансформаций:
Это позволяет формировать динамически изменяющиеся иерархии без изменения исходных данных, сохраняя согласованность структуры.
Несмотря на универсальность, модель имеет ограничения: