В системах декларативной визуализации данных Vega и Vega-Lite точечные маркеры играют центральную роль при построении диаграмм рассеяния, плотностных облаков, индикаторов событий и компактных сравнительных графиков. Основой таких маркеров являются символы (symbols), которые задаются через тип формы и размер.
В Vega управление символами осуществляется через mark
"symbol", а в Vega-Lite — через mark "point" с
абстракцией параметров формы и размера.
В спецификации Vega базовым графическим примитивом для точек выступает mark:
{
"type": "symbol"
}
Этот mark поддерживает два ключевых параметра визуализации:
Параметр symbolType определяет форму точки. Он может
принимать строковые значения, задающие геометрический тип:
"circle""square""triangle-up""triangle-down""diamond""cross""star"Каждый тип влияет на визуальную семантику данных. Например, треугольники часто применяются для обозначения направленных событий, а квадраты — для категориальных различий.
Пример:
{
"type": "symbol",
"encode": {
"enter": {
"shape": { "value": "diamond" }
}
}
}
В современных версиях Vega чаще используется поле shape,
которое фактически выполняет роль symbolType через систему
шкал.
symbolSize задаёт площадь символа в пикселях, а не
радиус. Это критически важно при масштабировании визуализаций.
{
"type": "symbol",
"encode": {
"enter": {
"size": { "value": 200 }
}
}
}
Особенность интерпретации:
Формально:
A = s
где A — площадь символа, s — значение
symbolSize.
Следствие:
r
Это означает, что удвоение symbolSize не удваивает
радиус визуального маркера.
Vega-Lite упрощает работу с символами, скрывая низкоуровневую
настройку symbolType и symbolSize за более
декларативными полями.
Основной mark:
{
"mark": "point"
}
В Vega-Lite параметр формы задаётся через shape в
encoding:
{
"mark": "point",
"encoding": {
"shape": {
"field": "category",
"type": "nominal"
}
}
}
Значения формы соответствуют тем же геометрическим типам, что и в Vega:
При этом Vega-Lite автоматически создаёт шкалу соответствия категорий и форм.
Размер точки задаётся через encoding:
{
"mark": "point",
"encoding": {
"size": {
"field": "value",
"type": "quantitative"
}
}
}
В отличие от Vega, где размер задаётся напрямую, Vega-Lite может:
Фактически Vega-Lite компилирует size в Vega
symbolSize.
Размер символов играет роль не только декоративного элемента, но и канала передачи количественной информации. В этом случае важно учитывать нелинейную природу восприятия площади.
Если значение увеличивается линейно:
s_2 = 2s_1
то визуально радиус изменяется слабее ожидаемого:
r_2 = ,r_1
Это приводит к частым ошибкам интерпретации данных, особенно при сравнении категорий с близкими значениями.
Комбинация формы и размера создаёт многомерное кодирование:
При одновременном использовании:
{
"mark": "point",
"encoding": {
"shape": { "field": "group", "type": "nominal" },
"size": { "field": "value", "type": "quantitative" },
"color": { "field": "group", "type": "nominal" }
}
}
возникает тройное кодирование, где визуальная нагрузка распределяется между каналами восприятия.
При компиляции Vega-Lite в Vega происходит преобразование:
mark: "point" → mark: "symbol"shape → encode.enter.shapesize → encode.enter.sizeПри этом:
Это делает Vega-Lite более высокоуровневым DSL над Vega.
В Vega прямое управление symbolType полезно в следующих
сценариях:
В Vega-Lite shape используется, когда:
Система символов имеет ряд особенностей:
symbolSize могут приводить к
потере различимостиРендеринг символов также зависит от:
Размер символа в Vega связан с площадью круга, эквивалентного по визуальному восприятию. Для окружности:
s = r^2
Отсюда радиус выражается как:
r =
Это объясняет, почему визуальные различия между значениями становятся менее интуитивными при больших диапазонах данных.
При высокой плотности точек символы начинают перекрывать друг друга. В таких случаях применяются:
symbolSizeОсобенно важно учитывать, что уменьшение size влияет на читаемость быстрее, чем линейное уменьшение воспринимаемой плотности.
Форма символа часто используется как вторичный канал кодирования:
В этом контексте symbolType или shape
становится дискретным пространством визуальных категорий, независимым от
количественного измерения symbolSize.