Поле point в спецификациях line и
area управляет отображением отдельных точек поверх линии
или области. Оно позволяет комбинировать непрерывный график с маркерами
данных, делая визуализацию более читаемой и информативной.
В Vega-Lite свойство point используется внутри объекта
mark.
Базовый пример:
{
mark: {
type: "line",
point: true
}
}
В результате поверх линии отображаются точки для каждого значения набора данных.
pointЛинейный график хорошо показывает тренд, но не всегда позволяет определить:
Поле point решает эти задачи за счёт наложения маркеров
поверх линии или области.
const spec = {
data: {
values: [
{x: 1, y: 10},
{x: 2, y: 20},
{x: 3, y: 15},
{x: 4, y: 30}
]
},
mark: {
type: "line",
point: true
},
encoding: {
x: {field: "x", type: "quantitative"},
y: {field: "y", type: "quantitative"}
}
};
Точки автоматически размещаются в координатах значений.
areaПоле point поддерживается и для графиков области.
mark: {
type: "area",
point: true
}
В этом случае:
Пример:
const spec = {
data: {
values: [
{month: "Jan", value: 30},
{month: "Feb", value: 50},
{month: "Mar", value: 40},
{month: "Apr", value: 70}
]
},
mark: {
type: "area",
point: true
},
encoding: {
x: {field: "month", type: "ordinal"},
y: {field: "value", type: "quantitative"}
}
};
trueСамый простой вариант:
point: true
Эквивалентно:
point: {}
Vega-Lite создаёт точки со стандартными параметрами:
point: false
или полное отсутствие свойства:
mark: "line"
pointПоле point может содержать объект с параметрами
оформления.
Пример:
mark: {
type: "line",
point: {
filled: true,
size: 120,
color: "red"
}
}
pointfilledУправляет заливкой маркеров.
point: {
filled: false
}
Получаются полые круги.
point: {
filled: true
}
Точки становятся закрашенными.
sizeРазмер маркеров.
point: {
size: 200
}
Размер задаётся в квадратных пикселях.
colorЦвет точек.
point: {
color: "orange"
}
Если цвет не указан:
encoding.color.shapeФорма точек.
Поддерживаются:
"circle""square""diamond""triangle""cross""stroke"Пример:
point: {
shape: "diamond"
}
strokeЦвет обводки.
point: {
stroke: "black"
}
strokeWidthТолщина контура.
point: {
strokeWidth: 2
}
opacityПрозрачность точек.
point: {
opacity: 0.5
}
fillЦвет внутренней части.
point: {
filled: true,
fill: "yellow"
}
const spec = {
data: {
values: [
{x: 1, y: 10},
{x: 2, y: 25},
{x: 3, y: 18},
{x: 4, y: 40}
]
},
mark: {
type: "line",
point: {
filled: true,
shape: "diamond",
size: 180,
fill: "white",
stroke: "red",
strokeWidth: 3,
opacity: 0.9
}
},
encoding: {
x: {field: "x", type: "quantitative"},
y: {field: "y", type: "quantitative"}
}
};
Точки наследуют некоторые параметры линии.
Например:
mark: {
type: "line",
color: "green",
point: true
}
Точки также станут зелёными.
mark: {
type: "line",
color: "blue",
point: {
color: "red"
}
}
Линия остаётся синей, точки становятся красными.
encoding.colorencoding: {
color: {
field: "category",
type: "nominal"
}
}
Каждая серия:
const spec = {
data: {
values: [
{year: 2020, value: 10, type: "A"},
{year: 2021, value: 20, type: "A"},
{year: 2022, value: 30, type: "A"},
{year: 2020, value: 15, type: "B"},
{year: 2021, value: 18, type: "B"},
{year: 2022, value: 25, type: "B"}
]
},
mark: {
type: "line",
point: true
},
encoding: {
x: {field: "year", type: "ordinal"},
y: {
field: "value",
type: "quantitative"
},
color: {
field: "type",
type: "nominal"
}
}
};
point и
интерактивностьТочки особенно полезны при использовании:
selection);const spec = {
data: {
values: [
{x: 1, y: 5},
{x: 2, y: 15},
{x: 3, y: 10}
]
},
mark: {
type: "line",
point: true
},
encoding: {
x: {field: "x", type: "quantitative"},
y: {field: "y", type: "quantitative"},
tooltip: [
{field: "x"},
{field: "y"}
]
}
};
Точки упрощают наведение мыши, особенно на плотных графиках.
В Vega-Lite можно отображать точки только при наведении.
const spec = {
data: {
values: [
{x: 1, y: 8},
{x: 2, y: 12},
{x: 3, y: 18},
{x: 4, y: 10}
]
},
params: [
{
name: "hover",
select: {
type: "point",
nearest: true,
on: "mouseover",
clear: "mouseout"
}
}
],
mark: {
type: "line",
point: {
filled: true
}
},
encoding: {
x: {field: "x", type: "quantitative"},
y: {field: "y", type: "quantitative"},
size: {
condition: {
param: "hover",
value: 200
},
value: 50
}
}
};
При наведении точка увеличивается.
При большом количестве значений точки могут:
Пример проблемы:
point: true
при тысячах значений.
point: {
opacity: 0.3
}
point: {
size: 20
}
point и
производительностьКаждая точка — отдельный графический объект.
При больших объёмах данных:
Особенно заметно:
point и отдельным слоем pointСуществует два подхода:
pointmark: {
type: "line",
point: true
}
layer: [
{
mark: "line"
},
{
mark: "point"
}
]
const spec = {
data: {
values: [
{x: 1, y: 10},
{x: 2, y: 30},
{x: 3, y: 20}
]
},
layer: [
{
mark: {
type: "line",
color: "steelblue"
}
},
{
mark: {
type: "point",
color: "red",
size: 150
}
}
],
encoding: {
x: {field: "x", type: "quantitative"},
y: {field: "y", type: "quantitative"}
}
};
pointПодходит для:
Layered-подход предпочтителен, если требуется:
areaВ area точки строятся по верхней линии области.
Пример:
mark: {
type: "area",
point: true
}
Точки располагаются:
line,
area и pointЧасто используется многослойный вариант:
layer: [
{
mark: "area"
},
{
mark: "line"
},
{
mark: "point"
}
]
Такой подход обеспечивает:
const spec = {
data: {
values: [
{day: 1, temp: 20},
{day: 2, temp: 24},
{day: 3, temp: 22},
{day: 4, temp: 28},
{day: 5, temp: 26}
]
},
layer: [
{
mark: {
type: "area",
opacity: 0.3
}
},
{
mark: {
type: "line",
strokeWidth: 3
}
},
{
mark: {
type: "point",
filled: true,
size: 120
}
}
],
encoding: {
x: {
field: "day",
type: "quantitative"
},
y: {
field: "temp",
type: "quantitative"
}
}
};
point и тема
оформленияТочки автоматически адаптируются под:
config;config: {
point: {
filled: true,
size: 80
}
}
Теперь все point по умолчанию используют эти
параметры.
В Vega-Lite рендеринг возможен через:
Преимущества:
Недостатки:
Преимущества:
Недостатки:
point: {
size: 1000
}
График становится перегруженным.
При тысячах значений точки превращаются в шум.
mark: {
color: "blue",
point: {
fill: "white",
stroke: "white"
}
}
Точки могут стать невидимыми.
point: {
opacity: 0.05
}
Точки практически исчезают.
Оптимально:
point: {
size: 40
}
Часто используют:
point: {
filled: true
}
Лучше:
Эффективны:
Пример:
point: {
filled: true,
fill: "white",
stroke: "#1f77b4",
strokeWidth: 2,
size: 120
}