Поля orient и offset в Vega и Vega-Lite
используются для управления расположением и направлением визуальных
элементов относительно базовых координат и геометрии графика. Эти
параметры особенно важны при работе с осями, подписями, легендами, а
также при точной настройке геометрических примитивов и трансформаций,
где требуется контроль смещения и ориентации элементов без изменения
исходных данных.
Параметр orient задаёт направление или «сторону»
размещения элемента в рамках визуализации. В контексте осей он
определяет, с какой стороны графика будет расположена ось, а также как
будет интерпретироваться её направление.
В Vega-Lite значение orient чаще всего встречается в
описании осей (axis), где влияет на положение и поведение
шкалы:
{
"mark": "bar",
"encoding": {
"x": { "field": "category", "type": "ordinal" },
"y": { "field": "value", "type": "quantitative" }
},
"axis": {
"orient": "bottom"
}
}
В данном случае ось размещается снизу. Возможные значения обычно включают:
topbottomleftrightКаждое значение не просто меняет визуальное положение, но и влияет на направление подписей, делений и выравнивание элементов относительно координатной сетки.
Для количественных шкал orient влияет на направление
роста значений. Например, ось слева (left) обычно
подразумевает вертикальную шкалу с ростом вверх, тогда как справа
(right) может потребовать инверсии или переосмысления
компоновки.
Для категориальных осей значение orient чаще определяет
только физическое размещение, не затрагивая семантику данных, но может
влиять на читаемость при плотных подписях.
В Vega система компоновки сцены строится на прямоугольных областях
(scenes), где каждый элемент имеет якорь привязки. orient
фактически задаёт, к какой границе области привязывается элемент:
top — привязка к верхней границеbottom — к нижнейleft — к левойright — к правойЭто особенно важно при динамическом ресайзе графиков, когда размеры сцены пересчитываются, а элементы должны сохранять логическую позицию.
Параметр offset задаёт линейное смещение элемента от его
базовой позиции. В отличие от orient, который определяет
направление, offset определяет величину сдвига вдоль этого
направления или перпендикулярно ему — в зависимости от контекста
использования.
В Vega-Lite offset часто применяется внутри осей, меток
и заголовков:
{
"axis": {
"labelOffset": 5,
"titleOffset": 12
}
}
Здесь используются специализированные формы offset:
labelOffset — смещение подписей деленийtitleOffset — смещение заголовка осиСмещение применяется после вычисления базовой позиции элемента. Это означает, что:
scale, orient)offset как финальная
корректировкаТаким образом, offset не влияет на данные или шкалы, а
только на пиксельное позиционирование.
offset может быть как положительным, так и
отрицательным:
Это позволяет, например, перемещать подписи внутрь столбцов диаграммы или выводить их за пределы области построения.
Совместное использование orient и offset
формирует точную систему управления размещением элементов.
orient задаёт:
offset задаёт:
При изменении orient направление применения
offset также может изменяться, так как смещение всегда
интерпретируется относительно локальной системы координат элемента.
{
"axis": {
"orient": "left",
"labelOffset": 8,
"titleOffset": 20
}
}
В этом случае:
В Vega низкоуровневые спецификации позволяют применять
offset и при отрисовке маркеров:
{
"marks": [
{
"type": "text",
"encode": {
"enter": {
"x": { "field": "x" },
"y": { "field": "y", "offset": -10 },
"text": { "field": "label" }
}
}
}
]
}
Здесь offset используется для поднятия текста над точкой
данных, чтобы избежать перекрытия с графическими примитивами.
При высокой плотности данных offset становится
инструментом предотвращения коллизий между элементами. Смещение подписей
позволяет:
orient в таких случаях используется для
перераспределения нагрузки по краям графика, уменьшая визуальную
перегрузку одной стороны.
В Vega-Lite orient и offset скрыты за более
высокоуровневыми абстракциями, такими как axis,
legend и header. В Vega же эти параметры могут
быть заданы напрямую в сцене, что даёт более точный контроль.
В Vega-Lite:
orient чаще декларативныйoffset чаще параметризованный через специализированные
поля (labelOffset, tickOffset)В Vega:
orient может влиять на трансформации группировокoffset может применяться на уровне
encode.enter, encode.update,
encode.exitЕсли рассматривать систему координат, то:
orient задаёт выбор грани прямоугольной области
сценыoffset задаёт смещение вдоль нормали к этой граниВ этом смысле оба параметра формируют двухкомпонентную модель позиционирования:
Такое разделение позволяет отделить семантическое размещение от визуальной тонкой настройки без изменения данных или масштабов.