В Vega и Vega-Lite поле values используется для
определения данных непосредственно внутри спецификации визуализации. Оно
задаёт явный массив объектов, каждый из которых
представляет отдельную запись набора данных. Такой подход исключает
необходимость внешнего источника данных (URL, CSV-файла или таблицы
данных), позволяя полностью инкапсулировать данные внутри JSON-описания
графика.
valuesБазовая форма использования values в Vega-Lite выглядит
как массив объектов:
{
"data": {
"values": [
{ "category": "A", "value": 28 },
{ "category": "B", "value": 55 },
{ "category": "C", "value": 43 }
]
}
}
Каждый объект в массиве представляет строку данных. Поля внутри объектов произвольны и определяются структурой визуализации.
Ключевая особенность:
values реализует принцип inline
dataset, где источник данных является частью декларативной
спецификации.
Основные характеристики:
valuesВ массиве могут использоваться любые JSON-совместимые типы:
string)number)boolean)object, array)Пример смешанных типов:
{
"data": {
"values": [
{ "label": "Q1", "sales": 1200, "active": true },
{ "label": "Q2", "sales": 900, "active": false },
{ "label": "Q3", "sales": 1500, "active": true }
]
}
}
В Vega-Lite отсутствует жёсткая схема данных — структура определяется использованием полей в encoding и transform.
Поле values чаще всего применяется в небольших и средних
наборах данных: диаграммах, прототипах, демонстрационных графиках.
Пример столбчатой диаграммы:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"data": {
"values": [
{ "month": "Jan", "revenue": 35 },
{ "month": "Feb", "revenue": 42 },
{ "month": "Mar", "revenue": 28 },
{ "month": "Apr", "revenue": 55 }
]
},
"mark": "bar",
"encoding": {
"x": { "field": "month", "type": "ordinal" },
"y": { "field": "revenue", "type": "quantitative" }
}
}
Здесь values выполняет роль полноценного источника
данных, который далее проходит через систему encoding.
Данные в values становятся входом для системы
визуального кодирования:
field в encoding указывает на ключ объектаtype определяет интерпретацию значенияvaluesПример:
"encoding": {
"x": { "field": "month", "type": "ordinal" },
"y": { "field": "revenue", "type": "quantitative" }
}
Связь формируется напрямую:
month → категориальная осьrevenue → количественная осьНесмотря на статичность, values поддерживает полный
набор трансформаций Vega-Lite:
filtercalculateaggregatewindowsortПример с вычисляемым полем:
{
"data": {
"values": [
{ "item": "A", "price": 10, "qty": 2 },
{ "item": "B", "price": 5, "qty": 5 }
],
"transform": [
{
"calculate": "datum.price * datum.qty",
"as": "total"
}
]
}
}
После трансформации каждое значение из values
расширяется новым вычисленным полем total.
values допускает сложные структуры данных, включая
вложенные массивы:
{
"data": {
"values": [
{
"id": 1,
"metrics": { "x": 10, "y": 20 }
},
{
"id": 2,
"metrics": { "x": 15, "y": 25 }
}
]
}
}
Доступ к вложенным полям осуществляется через точечную нотацию:
"encoding": {
"x": { "field": "metrics.x", "type": "quantitative" },
"y": { "field": "metrics.y", "type": "quantitative" }
}
valuesИспользование явных элементов накладывает архитектурные ограничения:
При масштабировании обычно заменяется на:
url (внешний источник)format (CSV/JSON парсинг)name (data references внутри Vega)| Источник | Описание | Особенности |
|---|---|---|
values |
встроенный массив | статичность, простота |
url |
внешний файл | масштабируемость |
name |
ссылка на dataset | композиция данных |
values занимает нижний уровень сложности и используется
как базовый способ определения данных.
При обработке Vega-Lite выполняет следующие шаги:
valuesЭтот процесс полностью декларативен и не требует императивного кода.
values особенно характерен для:
Пример scatter plot:
{
"data": {
"values": [
{ "x": 1, "y": 2 },
{ "x": 2, "y": 3 },
{ "x": 3, "y": 5 },
{ "x": 4, "y": 4 }
]
},
"mark": "point",
"encoding": {
"x": { "field": "x", "type": "quantitative" },
"y": { "field": "y", "type": "quantitative" }
}
}
Каждый элемент массива интерпретируется как отдельная точка в пространстве координат.
В Vega-Lite спецификация транслируется в Vega, где
values становится dataset с именем по умолчанию. Каждый
объект превращается в datum, доступный через выражения Vega:
datum.fielddatum["field"]Это обеспечивает единый механизм обработки данных независимо от источника.