В системе Vega-Lite канал size относится к группе визуальных каналов, отвечающих за отображение количественной информации через геометрические размеры графических примитивов. В отличие от каналов цвета или формы, size напрямую влияет на восприятие величины объекта, что делает его одним из наиболее семантически нагруженных механизмов кодирования данных.
В рамках декларативной модели визуализации size выступает как отображение (encoding) поля данных в параметр масштаба mark-элемента. Это отображение всегда проходит через функцию масштабирования (scale), которая преобразует исходные значения данных в визуальные размеры на экране.
В Vega канал size является более фундаментальным: он может задаваться как свойство mark, управляться через scales напрямую и комбинироваться с transform-операциями, влияющими на распределение визуальных величин.
Канал size в Vega-Lite не является универсальным числом — его поведение зависит от типа mark.
Для точек size чаще всего интерпретируется как площадь символа, а не его радиус. Это критически важный момент, поскольку линейное масштабирование радиуса приводит к искажённому восприятию данных.
size → площадь точки (area in pixels²)Такой подход обеспечивает более корректное восприятие относительных значений.
Для линий size интерпретируется как толщина линии (stroke width). Здесь масштабирование линейное:
size → strokeWidth в пикселяхДля прямоугольников size часто не используется напрямую, так как размеры задаются через width/height и позиционные каналы (x, y). Однако в некоторых конфигурациях size может влиять на толщину или вторичные визуальные свойства.
Каждое поле, связанное с каналом size, проходит через scale-функцию:
data value → scale → visual size (pixels)
Scale определяет, как числовые данные преобразуются в визуальные размеры. В Vega-Lite используются несколько типов шкал:
Особое значение имеет sqrt-scale, применяемая для точечных диаграмм. Она компенсирует восприятие площади, так как человеческое зрение воспринимает площадь нелинейно.
Если использовать линейное отображение значения в площадь, визуальное сравнение становится искажённым. Например, объект с размером 100 будет восприниматься не как в 10 раз больший по радиусу, а как значительно более крупный.
Корректная модель:
В Vega-Lite это поведение встроено в стандартную интерпретацию size для circle и point marks.
Канал size всегда связан с диапазоном допустимых визуальных значений:
"scale": {
"range": [10, 200]
}
Для точек это означает диапазон площадей. Для линий — диапазон толщин.
Важно, что слишком широкий диапазон приводит к визуальной доминации крупных элементов, а слишком узкий — к потере различий между значениями.
При работе с непрерывными данными size может становиться нестабильным визуально. Поэтому часто применяется предварительное преобразование:
Пример логарифмической стабилизации:
size ∝ log(value)
Это особенно полезно при работе с распределениями с длинным хвостом (population, income, network traffic).
Канал size часто используется совместно с другими визуальными каналами:
Такое сочетание позволяет строить многомерные визуализации без перегрузки одного канала.
Однако перегрузка size несколькими смысловыми нагрузками недопустима: один mark должен иметь единую семантику размера.
Для area-chart size не используется напрямую, так как площадь задаётся через координаты и заполнение. Однако концептуально area уже является интегрированным размером.
Базовая структура encoding:
"encoding": {
"size": {
"field": "value",
"type": "quantitative"
}
}
С добавлением scale:
"encoding": {
"size": {
"field": "value",
"type": "quantitative",
"scale": {
"type": "sqrt",
"range": [5, 300]
}
}
}
На уровне компиляции Vega Vega-Lite транслирует size в низкоуровневую спецификацию Vega:
В результате size становится функцией вида:
size = f(data, scale, config)
где f включает:
Legend для size отображается как серия символов или линий, отражающих изменение величины.
Особенности:
Legend играет роль интерпретатора канала, поскольку size сам по себе трудно воспринимается без опорных значений.
Прямое отображение значения в радиус приводит к экспоненциальному визуальному росту объектов.
Большие значения size перекрывают малые элементы, особенно в scatter plots.
При смешанных диапазонах данных size становится доминирующим каналом, подавляя остальные визуальные переменные.
size не предназначен для категорий без смысловой количественной интерпретации.
Подбор range зависит от плотности данных:
Важно учитывать масштаб визуального холста и количество элементов.
В интерактивных визуализациях size часто используется как динамический канал:
Такая динамика требует дополнительной стабилизации, чтобы избежать визуального “дрожания” при изменении scale.
Для точечных графиков:
visual_area = scale(value)
radius = sqrt(visual_area / π)
Для линейных графиков:
strokeWidth = scale(value)
Таким образом, size в Vega-Lite представляет собой не просто параметр отображения, а композицию функции восприятия и математического преобразования данных.
При группировке данных (например, по цвету или серии) scale size может быть:
Глобальная шкала обеспечивает сравнимость, локальная — детализацию внутри группы.
Глобальные настройки Vega-Lite могут переопределять поведение size:
Это позволяет централизованно управлять визуальной плотностью графиков без изменения отдельных encoding-блоков.
Канал size является одним из ключевых механизмов передачи количественных различий в визуализации. Его эффективность определяется корректным выбором шкалы, диапазона и соответствием типу mark-элемента.
В композиции визуальных каналов size часто выполняет роль вторичного усилителя структуры данных, подчёркивая значимые различия без необходимости увеличения числа визуальных переменных.