Данные

Как и модель данных Vega, основная модель данных Vega-Lite использует табличные данные, похожие на электронную таблицу или таблицу базы данных. Набор данных состоит из записей; каждая запись может содержать любое число именованных полей.

Свойство data задаёт источник данных внутри спецификации. Можно передать записи прямо в спецификации через values, указать адрес файла через url или объявить именованный источник через name. Именованный источник можно создать пустым и заполнить во время выполнения либо через свойство верхнего уровня datasets.

Кроме того, Vega-Lite включает генераторы данных, которые создают наборы данных: например, числовые последовательности или географические объекты в формате GeoJSON — координатную сетку и сферу.

Содержание страницы

Виды источников данных

Встроенные данные

Для встроенных данных укажите массив записей в values:

Свойство Тип Описание
values InlineDataset Полный набор данных, включённый в спецификацию. Это может быть массив объектов или простых значений, объект или строка. Простые значения массива загружаются как объекты с полем data. Строки разбираются согласно указанному типу формата.
name string Задаёт имя источника для привязки данных во время выполнения.
format DataFormat Объект, задающий формат разбора данных.

В следующей спецификации прямо записана таблица из девяти строк и двух столбцов — a и b:

Если values содержит простой массив значений, Vega-Lite превращает каждый элемент в объект с полем data. Например, [5, 3, 8, 1] будет загружен как:

[{"data": 5}, {"data": 3}, {"data": 8}, {"data": 1}]

Можно встроить и текстовую строку; её содержимое будет разобрано по указанному типу формата:

Данные по адресу URL

Свойство url указывает файл с данными. Тип входного файла можно уточнить через format.type; если формат не задан, Vega-Lite определяет его по расширению файла.

Свойство Тип Описание
url string URL для загрузки набора данных. Укажите format.type, чтобы обеспечить корректный разбор загруженных данных.
name string Задаёт имя источника для привязки данных во время выполнения.
format DataFormat Объект, задающий формат разбора данных.

Следующий пример загружает cars.json. Формат "json" определяется автоматически:

Именованные источники данных

Данные можно добавить во время выполнения через API представления Vega. Задайте имя в data.name:

Свойство Тип Описание
name string Задаёт имя источника для привязки данных во время выполнения. Новые данные могут изменить компоновку, однако Vega не всегда меняет размеры диаграммы автоматически. Чтобы обновлять компоновку вместе с данными, настройте autosize или явно вызовите view.resize.
format DataFormat Объект, задающий формат разбора данных.
{
  "name": "myData"
}

Используйте API представления Vega, чтобы загрузить данные во время выполнения и обновить диаграмму. Вот пример с Vega-Embed:

vegaEmbed('#vis', spec).then((res) => {
  const data = [/* массив записей */];
  res.view.insert('myData', data).run();
});

Можно также изменять данные диаграммы через набор изменений (changeset), как в примере потоковой передачи данных.

Формат данных

Объект format описывает тип входных данных и дополнительные правила разбора.

Свойство Тип Описание
type string Тип входных данных: "json", "csv", "tsv", "dsv". По умолчанию: определяется по расширению URL файла; если расширения нет, используется "json".
parse Parse или null Значение null отключает определение типов по спецификации; определение типов по самим данным сохраняется. Можно также передать объект явных правил разбора: ключи — имена полей, значения — "number", "boolean", "date" или null (не разбирать поле). Например, "parse": {"modified_on": "date"} преобразует поле modified_on каждой записи в значение Date. Для "date" используется JavaScript Date.parse(). Конкретный формат даты можно указать в синтаксисе d3-time-format, например {foo: "date:'%m%d%Y'"}. Аналогично поддерживается разбор UTC: {foo: "utc:'%m%d%Y'"}. Подробнее — в разделе UTC.

JSON

Файл JSON обычно содержит массив объектов с именованными полями. Это формат по умолчанию, используемый при отсутствии свойства format. Если format указан, его свойство type должно иметь значение "json". Кроме того, поддерживается следующее свойство:

Свойство Тип Описание
property string Свойство JSON, содержащее нужные данные. Используется, если загруженный файл содержит окружающую структуру или метаданные. Например, "property": "values.features" соответствует обращению к json.values.features в загруженном объекте.

CSV

Загрузка файла со значениями, разделёнными запятыми (CSV). Дополнительные свойства не поддерживаются.

TSV

Загрузка файла со значениями, разделёнными табуляцией (TSV). Дополнительные свойства не поддерживаются.

DSV

Загрузка текстового файла с произвольным разделителем. Это обобщённый вариант CSV и TSV.

Свойство Тип Описание
delimiter string Разделитель значений в текстовом файле. Должен состоять из одного символа — одной 16-битной кодовой единицы. Разделители ASCII подходят, эмодзи — нет.

TopoJSON

Vega-Lite загружает корректный файл TopoJSON и преобразует его в GeoJSON. Выберите один из двух способов извлечения географических объектов:

Свойство Тип Описание
feature string Имя набора объектов TopoJSON, который нужно преобразовать в коллекцию географических объектов GeoJSON. Например, карта мира может содержать набор "countries": это свойство извлекает его и создаёт отдельный объект GeoJSON для каждой страны.
mesh string Имя набора объектов TopoJSON, который нужно преобразовать в сетку. Как и feature, извлекает именованный набор, но возвращает единую сетку вместо отдельных объектов GeoJSON. Это позволяет эффективнее рисовать границы и другие географические элементы, которые не требуется связывать с отдельными странами, штатами или округами.

Свойства feature и mesh взаимоисключающие.

Генераторы данных

Числовая последовательность

Генератор sequence создаёт числа от start до stop с шагом step. Верхняя граница не включается. По умолчанию каждое число помещается в поле data; свойство as меняет его имя.

Свойство Тип Описание
start number Начальное значение последовательности, включаемое в результат.
stop number Конечное значение последовательности, не включаемое в результат.
step number Шаг между соседними значениями последовательности. По умолчанию: 1.
as FieldName Имя поля с генерируемыми значениями. По умолчанию: "data".

Пример генерирует числовую область и строит синусоиду с помощью преобразования calculate:

Географическая сетка

Географическая сетка состоит из линий широты и долготы. Генератор graticule создаёт её в формате GeoJSON. Значение true использует настройки по умолчанию; объект позволяет задать параметры:

Свойство Тип Описание
extent [[number, number], [number, number]] Задаёт одинаковые границы для основных и вспомогательных линий сетки.
extentMajor [[number, number], [number, number]] Границы основных линий сетки — массив из двух пар координат.
extentMinor [[number, number], [number, number]] Границы вспомогательных линий сетки — массив из двух пар координат.
precision number Точность построения сетки в градусах. По умолчанию: 2.5.
step [number, number] Задаёт одинаковые угловые интервалы для основных и вспомогательных линий сетки.
stepMajor [number, number] Угловые интервалы между основными линиями сетки. По умолчанию: [90, 360].
stepMinor [number, number] Угловые интервалы между вспомогательными линиями сетки. По умолчанию: [10, 10].

В примере пользовательская сетка показана с ортографической проекцией:

Сфера

Объект GeoJSON {"type": "Sphere"} обозначает весь земной шар. Генератор sphere добавляет набор данных с одной такой записью. Содержимое набора — [{"type": "Sphere"}]. Сфера может служить фоновым слоем карты, обозначающим поверхность Земли. Единственное свойство генератора задаётся значением true или пустым объектом {}.

Следующий пример строит карту из двух слоёв: светло-голубой сферы и чёрной географической сетки.

Наборы данных в datasets

Свойство верхнего уровня datasets хранит несколько встроенных наборов данных по именам. Это удобно, если один набор нужен в разных местах спецификации: определите его один раз и обращайтесь к нему через data.name.

    "datasets": {
      "somedata": [1,2,3]
    },
    "data": {
      "name": "somedata"
    }