Каналы row и column в фасетировании задают разбиение визуализации на регулярную сетку малых кратных графиков (small multiples), где каждая ячейка соответствует подмножеству данных, определённому значением одного или нескольких полей. В рамках декларативной грамматики визуализации Vega-Lite фасетирование является одним из ключевых механизмов масштабирования анализа данных без усложнения единственного графика.
В основе подхода лежит идея: вместо перегруженного одного графика создаётся множество одинаковых визуальных структур, различающихся только подмножеством данных.
Фасетирование переводит категориальные или дискретные признаки данных в пространственные координаты макета. Каналы row и column выполняют роль координат сетки:
Комбинация этих каналов формирует двумерную матрицу подграфиков.
Ключевая особенность заключается в том, что фасетирование работает на уровне компоновки, а не на уровне отдельных mark-ов. Каждый фасет получает собственную копию визуального представления.
В Vega и Vega-Lite фасетирование реализуется через группировку данных:
Формально:
field = A, то создаётся множество групп
{D₁, D₂, ..., Dₙ}, где каждая группа соответствует значению
AᵢКанал row определяет вертикальную декомпозицию пространства:
Пример логики:
Канал column формирует горизонтальное разбиение:
Пример:
При одновременном использовании:
row = Acolumn = Bформируется матрица размером:
|A| × |B|
Каждая ячейка соответствует пересечению значений двух категорий.
Это позволяет строить:
В Vega-Lite фасетирование задаётся через top-level свойства
row и column:
{
"data": {"url": "data.csv"},
"facet": {
"row": {"field": "region", "type": "nominal"},
"column": {"field": "year", "type": "ordinal"}
},
"spec": {
"mark": "bar",
"encoding": {
"x": {"field": "category", "type": "nominal"},
"y": {"field": "value", "type": "quantitative"}
}
}
}
В этом примере:
Одним из критических аспектов фасетирования является управление масштабами:
В Vega-Lite это управляется через:
"resolve": {
"scale": {"y": "shared"}
}
При фасетировании:
Особенно важно:
Порядок панелей определяется:
sortПример:
"facet": {
"row": {
"field": "month",
"type": "ordinal",
"sort": ["Jan", "Feb", "Mar"]
}
}
Сортировка влияет не только на визуальный порядок, но и на когнитивное восприятие временных или категориальных последовательностей.
Фасетирование в Vega-Lite автоматически трансформирует dataset:
Этот процесс эквивалентен операции:
GROUP BY row_field, column_field
Сложные визуализации могут использовать вложенные фасеты:
Пример концепции:
Это приводит к иерархическим grid-структурам.
Позволяет сравнивать разные показатели на одном уровне структуры.
Используется для анализа динамики.
При большом числе значений:
Если группы сильно различаются по размеру:
При shared scales избыточные оси увеличивают визуальный шум.
Фасетирование увеличивает количество render-единиц:
В Vega runtime это выражается через увеличение числа view instances и независимых scale computations.
row и column часто комбинируются с:
Фасетирование не заменяет encoding channels, а расширяет пространственную организацию визуальной информации.
В отличие от императивного построения сеток, Vega-Lite описывает фасет как декларацию структуры:
Это обеспечивает переносимость спецификаций и воспроизводимость визуализаций между средами исполнения.