Facet представляет собой механизм построения малых кратных (small multiples), при котором одна и та же визуализация автоматически тиражируется по подмножествам данных. В терминах Vega-Lite facet реализует декларативное разбиение набора данных на группы с последующим построением отдельного графика для каждой группы в сетке строк и/или столбцов.
В отличие от агрегированных диаграмм, где сравнение происходит внутри одного полотна, facet переносит сравнение в пространство одинаковых визуализаций. Это радикально меняет структуру восприятия: вместо усложнения одной диаграммы происходит стандартизация множества экземпляров.
Facet опирается на операцию группировки. Исходный набор данных разбивается по значению одного или нескольких полей. Каждая уникальная комбинация значений формирует отдельную панель.
Формально:
Каждое подмножество отображается одной и той же спецификацией визуализации.
В Vega-Lite facet является не только операцией над данными, но и каналом компоновки. Он определяет структуру сетки визуализации:
Каждый канал задаёт независимое измерение раскладки. Комбинация row и column формирует двумерную матрицу панелей.
Простейшая форма декларации:
{
"data": {"url": "data.csv"},
"facet": {
"row": {"field": "category", "type": "nominal"}
},
"spec": {
"mark": "bar",
"encoding": {
"x": {"field": "value", "type": "quantitative"},
"y": {"aggregate": "sum", "field": "amount"}
}
}
}
В этом примере каждая категория формирует отдельную строку, а внутри строки отображается одинаковая столбчатая диаграмма.
Использование row и column создаёт двумерную декомпозицию пространства данных.
Если заданы оба канала:
"facet": {
"row": {"field": "region", "type": "nominal"},
"column": {"field": "year", "type": "ordinal"}
}
формируется матрица:
Такой подход превращает визуализацию в таблицу графиков, где каждая ячейка — это независимая проекция данных.
Facet часто сравнивают с механизмом repeat, однако семантика различается.
Facet:
Repeat:
Таким образом, facet — это data-driven разбиение, а repeat — schema-driven дублирование.
При компиляции спецификации Vega-Lite преобразует facet в низкоуровневую структуру Vega. На этом этапе происходит:
Каждая facet-панель может иметь:
Выбор режима масштабов критически влияет на интерпретацию данных. Общие шкалы обеспечивают сравнимость, независимые — детализацию локальных закономерностей.
Facet автоматически генерирует заголовки, связанные с группирующим полем. Эти заголовки выполняют роль метаданных панели.
Пример:
"facet": {
"column": {
"field": "product",
"type": "nominal",
"header": {"title": "Продукт"}
}
}
Заголовки могут быть:
Семантически header является визуальным представлением группировочного ключа.
Facet может быть вложенным, создавая иерархические разбиения.
Пример:
Это создаёт двухуровневую структуру панелей, где каждая ячейка представляет пересечение категорий.
{
"facet": {
"row": {"field": "region", "type": "nominal"}
},
"spec": {
"facet": {
"column": {"field": "product_type", "type": "nominal"}
},
"spec": {
"mark": "line",
"encoding": {
"x": {"field": "date", "type": "temporal"},
"y": {"field": "value", "type": "quantitative"}
}
}
}
}
Такая композиция приводит к экспоненциальному росту числа панелей, что требует контроля размера данных и фильтрации.
Особое значение имеет взаимодействие facet с агрегированными полями.
При использовании агрегации внутри spec:
Пример:
"encoding": {
"y": {"aggregate": "mean", "field": "score", "type": "quantitative"}
}
Здесь среднее значение считается отдельно для каждой facet-группы, что позволяет сравнивать распределения между подмножествами.
Facet увеличивает нагрузку на рендеринг пропорционально числу групп. Основные факторы:
Оптимизационные стратегии:
Facet демонстрирует ключевой принцип Vega-Lite: отделение данных, логики группировки и визуального представления.
Вместо ручного создания сетки графиков разработчик описывает:
Система сама определяет:
Это делает facet не просто функцией, а базовым конструктивным оператором декларативной графической грамматики.
Facet часто используется для:
При этом основной эффект заключается в снижении когнитивной нагрузки: одинаковая форма графика позволяет быстрее выявлять различия между группами.
Несмотря на выразительность, facet имеет ограничения:
Эти ограничения требуют предварительного проектирования структуры данных перед построением визуализации.
Facet остаётся центральным механизмом построения сравнительных визуальных структур в декларативной грамматике графиков, обеспечивая системный способ перехода от единой диаграммы к пространству сопоставимых представлений данных.