Условное кодирование
// Спецификация одиночного представления или слоя
{
...,
"mark/layer": ...,
"encoding": {
...: {
// Условное определение канала кодирования (ветвь if)
"condition": {
// Имя параметра или проверочный предикат
"param/test": ...,
// Поле / значение, если данные входят в param или удовлетворяют предикату test
"field/value": ...,
...
},
// Необязательная ветвь else: поле / значение, если данные НЕ входят в param / НЕ удовлетворяют предикату test
"field/value": ...,
...
},
...
},
...
}
Для каналов свойств примитивов, а также каналов текста и подсказки свойство condition определения канала задаёт правила кодирования в зависимости от того, удовлетворяют ли значения данных параметру, например входят ли в выделение параметра, или удовлетворяют ли проверочному предикату test.
Есть два способа задать условие:
(1) Указать имя param:
| Свойство | Тип | Описание |
|---|---|---|
param |
ParameterName | Фильтрация по имени параметра. |
empty |
boolean | Для параметров выделения предикат пустого выделения по умолчанию возвращает true. Чтобы изменить это поведение, задайте empty: false. |
(2) Указать предикат test:
| Свойство | Тип | Описание |
|---|---|---|
test |
PredicateComposition | Предикат, при выполнении которого срабатывает условие. |
Кроме того, есть два способа кодировать данные, удовлетворяющие условию:
- Сочетать одно условное определение поля с одним базовым определением значения или
datum. - Сочетать одно или несколько условных определений datum или значения с определением поля,
datumили значения.
Условное определение поля
// Спецификация одиночного представления или слоя
{
...,
"mark/layer": ...,
"encoding": {
...: {
// Условное определение поля (ветвь if)
"condition": {
// Имя параметра или проверочный предикат
"param/test": ...,
// Поле, если данные входят в param или удовлетворяют предикату test
"field": ...,
"type": ...,
...
},
// Необязательная ветвь else: значение, если данные НЕ входят в param / НЕ удовлетворяют предикату test
"value/datum": ...
},
...
},
...
}
Условное определение поля применяет правило кодирования на основе данных, когда примитивы удовлетворяют параметру, например входят в выделение, или логическому предикату. Если условие не выполнено, в качестве ветви else можно задать определение значения.
Помимо имени кодируемого field и его типа type, как в обычном определении поля, условное определение поля должно содержать имя param или предикат test. Оно также может включать другие свойства кодирования: функции преобразования aggregate, bin, timeUnit, а также scale и legend для каналов свойств примитивов или format для каналов текста и подсказки.
Например, на следующей диаграмме цвет прямоугольников rect задаётся условным определением поля. Выделите интервал перетаскиванием: примитивы внутри него окрашиваются по агрегированному количеству записей, а вне него становятся серыми.
Примечание: при условном определении поля внешняя ветвь else может задавать только value или datum.
Условное определение значения
// Спецификация одиночного представления или слоя
{
...,
"mark/layer": ...,
"encoding": {
...: {
// Условное определение значения (ветвь if)
"condition": { // Имя параметра или проверочный предикат
"param/test": ..., // Значение, если данные входят в param или удовлетворяют предикату test
"value/datum": ...
},
// Необязательная ветвь else: поле, если данные НЕ входят в param / НЕ удовлетворяют предикату test
"field": ... ,
"type": ...,
...
},
...
},
...
}
Условные определения значения и datum кодируют постоянное значение, когда данные удовлетворяют параметру, например входят в выделение, или логическому предикату. Если условие не выполнено, ветвь else может задавать другое определение поля, datum или значения.
Помимо кодируемого постоянного value или постоянного значения данных datum, условное определение должно содержать имя param или предикат test.
В следующей визуализации условное определение значения увеличивает размер примитивов, попавших внутрь выделенного перетаскиванием интервала, относительно примитивов вне него.
Во внешней ветви else также можно сопоставить канал полю. Следующий пример обращает логику первого: условное значение окрашивает прямоугольники rect в серый, когда они не входят в выделение, а в остальных случаях используется обычное сопоставление полю. Обратите внимание: изначально серых примитивов нет, поскольку пустое выделение считается содержащим все значения данных.
Помимо имени param, можно задать условие test.
На следующей диаграмме условное определение значения задаёт чёрную текстовую подпись для светлого фона:
Следующая диаграмма использует условное определение значения, чтобы окрашивать точки с null в серый цвет. Если значение ветви else не задано, применяется цвет примитива по умолчанию.