В спецификациях Vega-Lite сортировка задаётся через свойство
sort внутри encoding и управляет порядком
категориальных осей, а также последовательностью элементов в легендах. В
Vega поведение сортировки реализуется на более низком уровне через
трансформации и сигналы, однако в большинстве прикладных задач
используется именно механизм Vega-Lite.
encoding.sortСвойство sort применяется к каналам x,
y, color, row,
column при категориальных данных. Оно определяет порядок
отображения шкалы или дискретных значений.
Основные формы:
{
"encoding": {
"x": {
"field": "category",
"type": "nominal",
"sort": "ascending"
},
"y": {
"field": "value",
"type": "quantitative"
}
}
}
Допустимые значения:
"ascending" — по возрастанию"descending" — по убываниюДля числовых данных это означает прямую сортировку значений поля. Для строк — лексикографический порядок.
Часто требуется сортировать категории по значению агрегированного показателя.
{
"encoding": {
"x": {
"field": "category",
"type": "nominal",
"sort": {
"field": "value",
"op": "mean",
"order": "descending"
}
},
"y": {
"aggregate": "mean",
"field": "value"
}
}
}
Ключевые компоненты объекта сортировки:
field — поле, по которому выполняется сортировкаop — агрегирующая операция (sum,
mean, median, max,
min, count)order — направление (ascending,
descending)Такой подход позволяет строить диаграммы, где категории упорядочены по статистике, а не по исходным данным.
Для полного контроля используется массив значений:
{
"encoding": {
"x": {
"field": "month",
"type": "nominal",
"sort": [
"Jan", "Feb", "Mar", "Apr", "May", "Jun"
]
},
"y": {
"field": "sales",
"type": "quantitative"
}
}
}
Особенности:
Такой метод критически важен для календарных шкал, стадий процессов и пользовательских таксономий.
Сортировка влияет не только на порядок отображения меток, но и на
домен шкалы. Vega-Lite автоматически формирует domain на основе данных,
но sort может переопределить порядок категорий.
Пример:
{
"encoding": {
"y": {
"field": "product",
"type": "nominal",
"sort": "descending"
},
"x": {
"field": "revenue",
"type": "quantitative"
}
}
}
Здесь ось Y будет упорядочена по убыванию значений категории, что влияет на визуальную иерархию графика.
Легенды для color, shape, size
также поддерживают sort.
{
"encoding": {
"color": {
"field": "group",
"type": "nominal",
"sort": "ascending"
},
"x": {
"field": "value",
"type": "quantitative"
}
}
}
Влияние:
Для temporal типов данных sort чаще всего
не требуется, но может быть использован при дискретизации времени:
{
"encoding": {
"x": {
"field": "date",
"type": "temporal",
"timeUnit": "month",
"sort": "ascending"
},
"y": {
"field": "value",
"type": "quantitative"
}
}
}
Если временные значения агрегируются (например, по месяцам), сортировка гарантирует правильный календарный порядок.
sort и агрегатовПри использовании агрегирования поведение сортировки зависит от уровня вычислений.
{
"encoding": {
"x": {
"field": "region",
"type": "nominal",
"sort": {
"op": "sum",
"field": "profit",
"order": "descending"
}
},
"y": {
"aggregate": "sum",
"field": "profit"
}
}
}
Механика:
В некоторых случаях сортировка задаётся на уровне шкалы:
{
"encoding": {
"x": {
"field": "category",
"type": "nominal",
"scale": {
"domain": {
"sort": {
"field": "value",
"op": "sum",
"order": "ascending"
}
}
}
}
}
}
Такой подход используется:
Категории с отсутствующими значениями:
Пример:
"sort": ["A", "B", "C"]
Если встречается "D", он будет добавлен после всех
перечисленных.
В facet, row, column
сортировка влияет на порядок панелей:
{
"facet": {
"field": "region",
"type": "nominal",
"sort": "descending"
},
"spec": {
"mark": "bar",
"encoding": {
"x": { "field": "product", "type": "nominal" },
"y": { "field": "sales", "type": "quantitative" }
}
}
}
Последовательность панелей определяется сортировкой facet-поля, что критично для сравнительных визуализаций.
При одновременном указании нескольких уровней сортировки действует следующая иерархия:
["A", "B", "C"])field + op + order"ascending" / "descending"При конфликте Vega-Lite выбирает наиболее конкретное правило.
"sort": { "field": "value", "op": "sum", "order": "descending" }
Используется в bar chart для ранжирования категорий.
"sort": ["Low", "Medium", "High"]
Используется в шкалах приоритетов и статусах.
"sort": "ascending"
Используется для справочников и списков без метрики.
В Vega сортировка не является свойством encoding. Вместо этого применяется:
orderПример:
{
"type": "sort",
"field": "value",
"order": "descending"
}
или через transform:
{
"type": "window",
"sort": { "field": "value", "order": "descending" }
}
Механизм sort в Vega-Lite объединяет три уровня
управления:
Это делает возможным построение как строгих бизнес-иерархий, так и динамически ранжируемых визуализаций без изменения исходного датасета.