Обработка некорректных данных

Эта страница описывает, как Vega-Lite обрабатывает null и NaN на непрерывных шкалах. Основные настройки — mark.invalid и config.scale.invalid. Для особых случаев можно использовать условное кодирование, слои и преобразования данных.

Значения null и NaN на категориальных шкалах и в текстовых каналах не считаются некорректными: категориальная шкала может выделить для них отдельные категории, а текстовый канал — показать их напрямую.

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

Режим mark.invalid

Свойство mark.invalid задаёт, как графический примитив и его шкалы обрабатывают null и NaN на непрерывных шкалах. Значение по умолчанию для всех примитивов можно установить в config.mark.invalid.

Свойство Тип Описание
invalid MarkInvalidDataMode, null Режим обработки некорректных данных: определяет, как примитивы и соответствующие шкалы представляют null и NaN в непрерывных шкалах, для которых не задано выходное значение для некорректных данных.

• "filter" — исключает все некорректные значения из примитивов и шкал. Для линий, областей и trail соединяет допустимые точки, как если бы некорректных строк данных не было.
• "break-paths-filter-domains" — разрывает линии, области и trail на некорректных значениях. Для остальных примитивов равнозначен "filter". Все области данных шкал исключают отфильтрованные точки.
• "break-paths-show-domains" — разрывает пути на некорректных значениях; для остальных примитивов скрывает такие значения. Области данных всех шкал включают эти отфильтрованные точки.
• "show" или null — показывает все точки в примитивах и областях данных шкал. Каждая шкала использует выходное значение из config.scale.invalid; если оно не задано, некорректные значения получают тот же вид, что ноль (если шкала включает ноль), или минимальное значение (если не включает).
• "break-paths-show-path-domains" (по умолчанию) — равнозначен "break-paths-show-domains" для линий, областей и trail, а для остальных примитивов — "filter".

Примечание: если в config.scale.invalid задан выход для некорректных значений шкалы канала, все значения этой шкалы считаются допустимыми, поскольку могут дать определённый результат. Поля таких каналов не фильтруются и не вызывают разрывы путей.

Сравнение режимов

Следующие диаграммы используют набор данных с пропусками по обоим полям:

[
  {"a": null, "b": 100},
  {"a": -10, "b": null},
  {"a": -5, "b": -25},
  {"a": -1, "b": -20},
  {"a": 0, "b": null},
  {"a": 1, "b": 30},
  {"a": 5, "b": 40},
  {"a": 10, "b": null}
]

Поле a назначено оси X как количественное или порядковое, поле b — оси Y.

"filter"

Режим filter исключает все некорректные значения из примитивов и шкал. Для линий, областей и trail он соединяет корректные точки, как если бы записей с некорректными значениями не существовало:

"break-paths-filter-domains"

Пути линий, областей и trail разрываются в местах некорректных значений. Для остальных примитивов режим эквивалентен filter. Все области значений шкал исключают отфильтрованные точки:

"break-paths-show-domains"

Линия также прерывается, но области определения шкал учитывают все записи:

"show"

Все записи участвуют в построении. Положение некорректных значений задаёт шкала или config.scale.invalid:

"break-paths-show-path-domains" — режим по умолчанию

По историческим причинам этот режим используется по умолчанию, чтобы избежать несовместимых изменений. Для линий, областей и trail он эквивалентен break-paths-show-domains, а для остальных примитивов — filter:

Результат шкалы для некорректных значений

Используйте config.scale.invalid, чтобы задавать выходные значения шкал для некорректных данных отдельно по каналам.

Свойство Тип Описание
invalid ScaleInvalidDataConfig Объект выходных значений шкал для некорректных данных (null и NaN на непрерывной шкале). Ключи — каналы шкал. Значения — "zero-or-min" (использовать ноль, если он включён в шкалу, иначе минимум) или определение {value: ...}.

Например, config.scale.invalid: {color: {value: "#aaa"}} окрашивает все некорректные значения цветом #aaa.

Подробнее — в документации некорректных данных.

Цвет и размер при режиме "filter"

Даже при "filter" записи с пропусками в каналах цвета и размера могут остаться на графике, если для этих каналов задан config.scale.invalid:

Сравните с той же диаграммой без config.scale.invalid:

Цвет при режиме "show"

Без явной настройки некорректные значения получают видимое значение нуля или минимума шкалы:

Через config.scale.invalid можно назначить им другое значение:

Другие способы обработки

Настройки mark.invalid и config.scale.invalid меняют отображение некорректных данных, не изменяя сами записи или набор примитивов. Для дополнительных сценариев подходят условное кодирование, несколько слоёв и оконные преобразования.

Условное кодирование

Если основной канал цвета свободен, условие может выделить некорректные записи, например серым цветом:

Слои

Другой графический примитив, например столбец, может отдельно показывать записи со значением null:

Оконное преобразование

Оконное преобразование может восстановить отсутствующие значения до построения графика: