Поле value: константные визуальные свойства

В Vega-Lite параметр value в каналах кодирования используется для задания фиксированных визуальных характеристик элементов графика. В отличие от field, который связывает визуальное свойство с данными, value задаёт константу, одинаковую для всех элементов данного слоя или для выбранного подмножества.


Семантика value в системе кодирования

В модели Vega-Lite каждое визуальное свойство mark’а может быть задано двумя принципиально разными способами:

  • через поле данных (field) — значение извлекается из набора данных;
  • через константу (value) — значение фиксировано и не зависит от данных.

Конструкция value формирует однородное визуальное поведение, применяемое ко всем элементам, попадающим под соответствующее правило кодирования.


Положение value в структуре спецификации

value используется внутри блока encoding, либо в определении mark, когда требуется задать статическое оформление:

{
  "mark": "circle",
  "encoding": {
    "x": { "field": "x", "type": "quantitative" },
    "y": { "field": "y", "type": "quantitative" },
    "color": { "value": "steelblue" }
  }
}

В данном примере координаты берутся из данных, а цвет задаётся фиксированно и не зависит от значений строк датасета.


Противопоставление field и value

Различие между двумя подходами является фундаментальным для Vega-Lite:

Характеристика field value
Источник данные константа
Изменчивость динамическая статическая
Привязка к данным есть отсутствует
Использование аналитическая визуализация стилизация

Использование value исключает участие канала в визуальной агрегации и масштабировании данных.


Константные визуальные каналы

Практически все визуальные каналы Vega-Lite поддерживают value, включая:

  • color
  • size
  • opacity
  • strokeWidth
  • fill
  • shape
  • stroke

Каждый из них принимает фиксированное значение, которое применяется ко всем mark’ам слоя.


Цвет как константа

Наиболее частое применение value связано с визуальной унификацией цвета:

{
  "mark": "bar",
  "encoding": {
    "x": { "field": "category", "type": "nominal" },
    "y": { "field": "amount", "type": "quantitative" },
    "color": { "value": "#4C78A8" }
  }
}

Все столбцы получают одинаковый цвет, что подчёркивает структуру данных, но не вводит дополнительное измерение.


Константные числовые параметры

value может задавать и числовые параметры, влияющие на геометрию mark’ов:

{
  "mark": "point",
  "encoding": {
    "x": { "field": "time", "type": "temporal" },
    "y": { "field": "value", "type": "quantitative" },
    "size": { "value": 80 }
  }
}

Размер всех точек фиксируется, исключая влияние вариативности через данные.


Прозрачность и визуальная иерархия

Константная прозрачность часто используется для управления визуальной иерархией слоёв:

{
  "mark": "line",
  "encoding": {
    "x": { "field": "date", "type": "temporal" },
    "y": { "field": "price", "type": "quantitative" },
    "opacity": { "value": 0.6 }
  }
}

Значение opacity создаёт стабильный визуальный контекст без усложнения структуры данных.


Комбинация с данными в одном графике

value часто применяется совместно с динамическими каналами для разделения ролей:

  • данные определяют структуру (ось, группы, порядок);
  • value определяет стиль (цвет, толщина, прозрачность).
{
  "mark": "line",
  "encoding": {
    "x": { "field": "year", "type": "temporal" },
    "y": { "field": "sales", "type": "quantitative" },
    "color": { "value": "black" },
    "strokeWidth": { "value": 2 }
  }
}

Использование в слоях (layer)

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

{
  "layer": [
    {
      "mark": "line",
      "encoding": {
        "x": { "field": "x", "type": "quantitative" },
        "y": { "field": "y", "type": "quantitative" },
        "color": { "value": "lightgray" }
      }
    },
    {
      "mark": "point",
      "encoding": {
        "x": { "field": "x", "type": "quantitative" },
        "y": { "field": "y", "type": "quantitative" },
        "color": { "value": "red" },
        "size": { "value": 60 }
      }
    }
  ]
}

Линия выполняет роль фона, точки — акцентируют данные, оба слоя используют value для статического оформления.


Типы значений value

Формат значения зависит от канала:

  • строка — для цветов ("steelblue", "#ff0000");
  • число — для размеров и прозрачности (10, 0.5);
  • массив — для некоторых визуальных свойств (например, штриховка в strokeDash).
{
  "encoding": {
    "strokeDash": { "value": [4, 2] }
  }
}

Типичные ошибки при использовании

Часто встречающиеся некорректные подходы:

  • использование field вместо value для фиксированных стилей;
  • попытка применять value как вычисляемое выражение;
  • смешивание масштабируемых шкал с константами без понимания приоритетов;
  • использование value там, где требуется визуальная переменность данных.

Поведение в системе масштабов

value полностью исключается из процесса масштабирования:

  • не проходит через scale;
  • не участвует в домене/диапазоне;
  • не агрегируется;
  • не трансформируется.

Это делает его «вне-данным» параметром визуализации, работающим на уровне рендеринга mark’ов.


Роль в архитектуре Vega-Lite

Константные визуальные свойства формируют слой стилистического контроля, отделённый от данных. Такая модель позволяет:

  • сохранять чистоту декларативного описания;
  • разделять семантику данных и внешний вид;
  • уменьшать сложность спецификаций при повторяющихся стилях.

value выступает механизмом, который фиксирует визуальную форму независимо от изменений структуры данных, обеспечивая стабильность отображения в любых условиях.