В спецификациях Vega и Vega-Lite поле direction отвечает за направление письма текста в текстовых примитивах (text marks), включая подписи, метки осей и произвольные текстовые аннотации. Оно критически важно для корректного отображения языков с письмом справа налево и для смешанных многоязычных визуализаций.
direction задаёт порядок визуального чтения текста и влияет на то, как браузер и SVG-рендерер интерпретируют строку символов внутри текстового объекта.
Основные значения:
Ключевой момент: direction не меняет сами символы, он управляет только их визуальной компоновкой.
В Vega поле direction применяется в блоке
mark, когда используется тип text.
Пример базовой структуры:
{
"type": "text",
"encode": {
"enter": {
"x": { "value": 100 },
"y": { "value": 50 },
"text": { "value": "שלום" },
"direction": { "value": "rtl" }
}
}
}
В этом случае текст будет отрисован справа налево, что соответствует семантике ивритского слова.
В Vega-Lite поле direction чаще всего применяется через:
markencodingconfigПрямое задание встречается реже, поскольку Vega-Lite абстрагирует низкоуровневые свойства Vega.
Пример:
{
"data": { "values": [
{ "x": 1, "y": 10, "label": "مرحبا" }
]},
"mark": {
"type": "text",
"direction": "rtl"
},
"encoding": {
"x": { "field": "x", "type": "quantitative" },
"y": { "field": "y", "type": "quantitative" },
"text": { "field": "label" }
}
}
Здесь direction применяется ко всем текстовым элементам mark, если не переопределено на уровне encode.
При смешанном содержимом (например, латиница + арабский текст) направление играет роль только на уровне строки:
Ключевая особенность: direction влияет на базовую ориентацию, но не заменяет Unicode-алгоритм двунаправленного текста.
Поле direction тесно связано с параметрами позиционирования текста:
left, right, center)top, middle, bottom,
alphabetic)Комбинации дают разные визуальные эффекты:
Текст начинается слева и выравнивается по левому краю.
Логически текст идёт справа налево, но якорная точка остаётся слева, что может создавать визуально неожиданные смещения.
Наиболее естественная комбинация для арабских и ивритских подписей.
В Vega-Lite и Vega можно задавать направление глобально через конфигурацию:
{
"config": {
"text": {
"direction": "rtl"
}
}
}
Механика наследования:
Важно: локальные значения всегда переопределяют глобальные настройки.
В Vega-Lite направление текста часто критично для:
Пример:
{
"mark": "bar",
"encoding": {
"x": {
"field": "category",
"type": "nominal",
"axis": {
"labelAngle": 0,
"labelExpr": "datum.label",
"labelDir": "rtl"
}
},
"y": { "field": "value", "type": "quantitative" }
}
}
Хотя Vega-Lite не всегда экспонирует прямое поле
direction в axis, оно транслируется в Vega через текстовые
элементы.
На уровне Vega runtime:
direction CSS/SVG
свойствоtext-anchor в связке с alignВ Canvas-рендерере поведение может отличаться:
{
"mark": "text",
"encoding": {
"text": { "field": "label" }
},
"config": {
"text": {
"direction": "rtl",
"align": "right"
}
}
}
{
"mark": {
"type": "text",
"direction": "inherit"
}
}
Использование inherit позволяет браузеру применять
Unicode BiDi-алгоритм без принудительного переопределения логики.
Поле direction часто рассматривается в связке с:
Комбинация direction + angle особенно чувствительна:
| Аспект | Vega | Vega-Lite |
|---|---|---|
| Уровень контроля | низкоуровневый | абстрагированный |
| Прямое задание | всегда доступно | частично делегировано |
| Наследование | явное через config | через config + трансляцию |
| axis labels | ручная настройка | автоматическая генерация |
Vega предоставляет полный контроль над direction на уровне каждого text mark, тогда как Vega-Lite чаще использует его как конфигурационный параметр.
Если поле direction не задано:
Это поведение особенно заметно в мультиязычных данных, где направление текста становится зависимым от Unicode-содержимого строки, а не от спецификации визуализации.