Марка (mark) — базовый графический примитив визуализации. Любая диаграмма в Vega или Vega-Lite строится из марок: точек, линий, прямоугольников, текста, областей, дуг и других элементов.
В Vega-Lite марка задаётся через свойство mark:
{
"mark": "bar"
}
В Vega используется более подробная структура:
{
"marks": [
{
"type": "rect"
}
]
}
Каждая марка поддерживает набор свойств:
fillСвойство fill определяет внутренний цвет фигуры.
{
"mark": {
"type": "bar",
"fill": "steelblue"
}
}
{
"type": "rect",
"encode": {
"update": {
"fill": {
"value": "steelblue"
}
}
}
}
"fill": "red"
"fill": "#ff0000"
"fill": "rgb(255,0,0)"
"fill": "rgba(255,0,0,0.5)"
fill;strokeОпределяет цвет контура.
{
"mark": {
"type": "bar",
"stroke": "black"
}
}
fill и stroke{
"mark": {
"type": "circle",
"fill": "orange",
"stroke": "black"
}
}
strokeWidthУправляет толщиной контура.
{
"mark": {
"type": "point",
"strokeWidth": 3
}
}
0 фактически убирает границу;opacityОбщая прозрачность элемента.
{
"mark": {
"type": "bar",
"opacity": 0.5
}
}
| Значение | Описание |
|---|---|
0 |
полностью прозрачно |
1 |
полностью непрозрачно |
fillOpacity{
"mark": {
"type": "circle",
"fillOpacity": 0.3
}
}
strokeOpacity{
"mark": {
"type": "circle",
"strokeOpacity": 1
}
}
opacityopacity влияет на весь объект целиком, а
fillOpacity и strokeOpacity — только на
конкретную часть.
sizeСвойство size используется различными марками
по-разному.
{
"mark": {
"type": "point",
"size": 200
}
}
Размер шрифта:
{
"mark": {
"type": "text",
"size": 18
}
}
Толщина линии:
{
"mark": {
"type": "line",
"size": 4
}
}
Семантика свойства зависит от типа марки.
shapeИспользуется преимущественно для точек.
{
"mark": {
"type": "point",
"shape": "diamond"
}
}
circlesquarecrossdiamondtriangle-uptriangle-downcursorПозволяет изменять внешний вид курсора мыши.
{
"mark": {
"type": "point",
"cursor": "pointer"
}
}
| Значение | Назначение |
|---|---|
pointer |
интерактивный элемент |
crosshair |
точное позиционирование |
move |
перетаскивание |
В Vega-Lite:
{
"encoding": {
"tooltip": [
{"field": "name"},
{"field": "value"}
]
}
}
В Vega:
{
"encode": {
"update": {
"tooltip": {
"signal": "datum.name"
}
}
}
}
x, yВ Vega координаты задаются явно:
{
"encode": {
"update": {
"x": {"value": 100},
"y": {"value": 50}
}
}
}
В Vega-Lite обычно используются каналы кодирования:
{
"encoding": {
"x": {"field": "category"},
"y": {"field": "value"}
}
}
barcornerRadiusСкругление углов столбца.
{
"mark": {
"type": "bar",
"cornerRadius": 6
}
}
cornerRadiusTopLeftcornerRadiusTopRightcornerRadiusBottomLeftcornerRadiusBottomRightПример:
{
"mark": {
"type": "bar",
"cornerRadiusTopLeft": 10,
"cornerRadiusTopRight": 10
}
}
binSpacingРасстояние между столбцами.
{
"mark": {
"type": "bar",
"binSpacing": 2
}
}
lineinterpolateОпределяет способ соединения точек.
{
"mark": {
"type": "line",
"interpolate": "monotone"
}
}
| Значение | Описание |
|---|---|
linear |
прямые сегменты |
step |
ступенчатая линия |
basis |
сглаживание |
cardinal |
плавная кривая |
monotone |
монотонная интерполяция |
tensionИспользуется для управления кривизной.
{
"mark": {
"type": "line",
"interpolate": "cardinal",
"tension": 0.8
}
}
pointОтображение точек поверх линии.
{
"mark": {
"type": "line",
"point": true
}
}
{
"mark": {
"type": "line",
"point": {
"filled": true,
"size": 100
}
}
}
arealineДобавляет контур линии.
{
"mark": {
"type": "area",
"line": true
}
}
orientОриентация области.
{
"mark": {
"type": "area",
"orient": "vertical"
}
}
verticalhorizontalpointfilledОпределяет, должна ли точка быть закрашенной.
{
"mark": {
"type": "point",
"filled": true
}
}
| Значение | Результат |
|---|---|
true |
заполненная фигура |
false |
только контур |
texttextТекстовое содержимое.
{
"mark": "text",
"encoding": {
"text": {
"field": "label"
}
}
}
fontШрифт текста.
{
"mark": {
"type": "text",
"font": "Arial"
}
}
fontSizeРазмер текста.
{
"mark": {
"type": "text",
"fontSize": 20
}
}
fontWeightТолщина шрифта.
{
"mark": {
"type": "text",
"fontWeight": "bold"
}
}
fontStyleСтиль текста.
{
"mark": {
"type": "text",
"fontStyle": "italic"
}
}
alignГоризонтальное выравнивание.
{
"mark": {
"type": "text",
"align": "center"
}
}
leftcenterrightbaselineВертикальное выравнивание.
{
"mark": {
"type": "text",
"baseline": "middle"
}
}
topmiddlebottomdx и dyСмещение текста.
{
"mark": {
"type": "text",
"dx": 10,
"dy": -5
}
}
angleПоворот текста.
{
"mark": {
"type": "text",
"angle": 45
}
}
arcИспользуется для круговых диаграмм.
innerRadiusСоздание кольцевой диаграммы.
{
"mark": {
"type": "arc",
"innerRadius": 50
}
}
outerRadiusВнешний радиус.
{
"mark": {
"type": "arc",
"outerRadius": 120
}
}
padAngleРасстояние между секторами.
{
"mark": {
"type": "arc",
"padAngle": 0.02
}
}
cornerRadiusСкругление сегментов.
{
"mark": {
"type": "arc",
"cornerRadius": 5
}
}
rectcornerRadiusСкругление прямоугольника.
{
"mark": {
"type": "rect",
"cornerRadius": 4
}
}
ruleМарка rule используется для отображения
линий-ориентиров.
strokeDashПунктирная линия.
{
"mark": {
"type": "rule",
"strokeDash": [6, 4]
}
}
strokeCapФорма окончания линии.
{
"mark": {
"type": "rule",
"strokeCap": "round"
}
}
buttroundsquareВ Vega свойства обычно находятся внутри секции
encode.
encode{
"marks": [
{
"type": "symbol",
"encode": {
"enter": {},
"update": {},
"hover": {}
}
}
]
}
| Секция | Назначение |
|---|---|
enter |
начальное состояние |
update |
обычное состояние |
hover |
наведение |
exit |
удаление |
signal{
"fill": {
"signal": "datum.value > 100 ? 'red' : 'green'"
}
}
В Vega-Lite свойства могут задаваться:
{
"config": {
"bar": {
"fill": "steelblue"
}
}
}
Локальное свойство имеет приоритет:
{
"mark": {
"type": "bar",
"fill": "red"
}
}
{
"encoding": {
"color": {
"condition": {
"test": "datum.value > 100",
"value": "red"
},
"value": "green"
}
}
}
{
"encoding": {
"size": {
"condition": {
"test": "datum.selected",
"value": 300
},
"value": 100
}
}
}
{
"selection": {
"hover": {
"type": "single",
"on": "mouseover"
}
},
"encoding": {
"opacity": {
"condition": {
"selection": "hover",
"value": 1
},
"value": 0.3
}
}
}
{
"mark": {
"type": "point",
"filled": true,
"size": 200,
"fill": "orange",
"stroke": "black",
"strokeWidth": 2,
"opacity": 0.8,
"shape": "diamond"
}
}
Некоторые свойства существенно влияют на производительность.
Предпочтительно:
{
"mark": {
"type": "point",
"opacity": 0.3
}
}
Нежелательно:
{
"mark": {
"type": "point",
"strokeWidth": 5,
"shadowBlur": 20
}
}
Наиболее полезны:
tooltipcursoropacitystrokeWidthconditionsignalОсобенно важны:
fontfontSizealignbaselinecornerRadiusinterpolate| Возможность | Vega-Lite | Vega |
|---|---|---|
| Простота | высокая | средняя |
| Контроль | ограниченный | полный |
| Signals | частично | полностью |
| Состояния hover | ограниченно | полностью |
| Анимация | базовая | расширенная |
| Низкоуровневый рендеринг | нет | да |
size{
"mark": {
"type": "bar",
"size": 100
}
}
Для bar свойство работает иначе, чем для
point.
opacity и
fillOpacity{
"mark": {
"opacity": 0.2,
"fillOpacity": 1
}
}
Итоговая прозрачность всё равно будет уменьшена.
stroke без strokeWidthКонтур может оказаться практически незаметным.
{
"stroke": "black"
}
Лучше:
{
"stroke": "black",
"strokeWidth": 2
}
Свойства марок в Vega и Vega-Lite формируют три ключевых уровня визуализации:
Комбинация общих и специфичных свойств позволяет: