Поле interpolate в Vega и Vega-Lite управляет способом
соединения точек в линейных (line) и областных
(area) графиках. От выбора интерполяции зависит визуальное
восприятие данных: график может выглядеть строго дискретным, плавным,
ступенчатым или математически сглаженным.
Интерполяция применяется:
mark: "line");mark: "area");Простейший пример:
{
"mark": {
"type": "line",
"interpolate": "linear"
}
}
interpolateВ Vega-Lite поле располагается внутри объекта mark.
{
"data": {
"values": [
{"x": 1, "y": 10},
{"x": 2, "y": 30},
{"x": 3, "y": 20},
{"x": 4, "y": 50}
]
},
"mark": {
"type": "line",
"interpolate": "monotone"
},
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"}
}
}
В Vega используется аналогичное свойство:
{
"type": "line",
"interpolate": "basis"
}
При построении линии визуализация получает набор точек:
(1, 10)
(2, 30)
(3, 20)
(4, 50)
Без интерполяции точки соединяются прямыми сегментами.
Интерполяция изменяет форму перехода между точками:
linearlinear — стандартный режим. Точки соединяются прямыми
линиями.
{
"mark": {
"type": "line",
"interpolate": "linear"
}
}
Особенности:
Подходит для:
Ломаная линия:
•
\
•
/ \
• •
monotonemonotone создаёт плавную кривую без паразитических
экстремумов.
{
"mark": {
"type": "line",
"interpolate": "monotone"
}
}
Кривая не создаёт ложных пиков между точками.
Это особенно важно для:
Если значения растут, кривая не уйдёт вниз.
Если значения падают, не появится искусственный максимум.
Некоторые алгоритмы могут создавать подобные артефакты:
точки: • •
\ /
•
monotone предотвращает такие эффекты.
basisbasis создаёт очень плавную кривую.
{
"mark": {
"type": "line",
"interpolate": "basis"
}
}
~ ~ ~ плавная кривая ~ ~ ~
Подходит для:
Главная проблема — потеря точности.
Пользователь может интерпретировать сглаженную кривую как реальные данные.
cardinalcardinal создаёт плавную кривую, проходящую через
точки.
{
"mark": {
"type": "line",
"interpolate": "cardinal"
}
}
basis| Тип | Проходит через точки | Степень сглаживания |
|---|---|---|
| basis | не всегда | высокая |
| cardinal | да | средняя |
Кривая:
Возможны:
catmull-romСоздаёт гладкие кривые с естественными переходами.
{
"mark": {
"type": "line",
"interpolate": "catmull-rom"
}
}
Используется для:
Кривая выглядит «живой» и непрерывной.
stepstep формирует ступени между точками.
{
"mark": {
"type": "line",
"interpolate": "step"
}
}
Сначала выполняется горизонтальное смещение, затем вертикальное.
•───┐
│
└──•
Подходит для:
Изменение происходит мгновенно, а не плавно.
step-before{
"mark": {
"type": "line",
"interpolate": "step-before"
}
}
Сначала выполняется вертикальный переход.
┌──•
│
•─┘
Новое значение начинает действовать ДО следующей точки.
step-after{
"mark": {
"type": "line",
"interpolate": "step-after"
}
}
Текущее значение сохраняется до следующей точки.
•──┐
│
└─•
Подходит для:
bundlebundle используется значительно реже.
{
"mark": {
"type": "line",
"interpolate": "bundle"
}
}
Применяется в:
Линии визуально группируются в «пучки».
areaПоле interpolate работает и для областей.
{
"mark": {
"type": "area",
"interpolate": "monotone"
}
}
{
"mark": {
"type": "area",
"interpolate": "linear"
}
}
Область повторяет форму ломаной линии.
{
"mark": {
"type": "area",
"interpolate": "basis"
}
}
Создаётся мягкая волнообразная поверхность.
{
"mark": {
"type": "area",
"interpolate": "step"
}
}
Используется для:
Создаёт ощущение:
Создаёт ощущение:
Подчёркивает:
Для временных данных чаще используются:
| Тип | Назначение |
|---|---|
| linear | точный анализ |
| monotone | плавный временной ряд |
| step | интервальные значения |
Проблема:
"interpolate": "basis"
может скрыть:
Некоторые кривые:
Особенно это заметно у:
cardinal;catmull-rom.Плавная кривая может визуально намекать на непрерывный процесс, хотя данные дискретны.
Быстрее работают:
linear;step.Требуют больше вычислений:
basis;cardinal;catmull-rom.tensionНекоторые типы поддерживают параметр tension.
{
"mark": {
"type": "line",
"interpolate": "cardinal",
"tension": 0.8
}
}
tension регулирует:
tensionОбычно:
0 → сильное сглаживание
1 → более жёсткая форма
cardinal{
"data": {
"values": [
{"x": 0, "y": 10},
{"x": 1, "y": 30},
{"x": 2, "y": 15},
{"x": 3, "y": 40}
]
},
"mark": {
"type": "line",
"interpolate": "cardinal",
"tension": 0.3
},
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"}
}
}
Пример Vega-спецификации:
{
"$schema": "https://vega.github.io/schema/vega/v5.json",
"width": 400,
"height": 200,
"data": [
{
"name": "table",
"values": [
{"x": 0, "y": 28},
{"x": 1, "y": 55},
{"x": 2, "y": 43},
{"x": 3, "y": 91}
]
}
],
"scales": [
{
"name": "xscale",
"type": "linear",
"domain": {"data": "table", "field": "x"},
"range": "width"
},
{
"name": "yscale",
"type": "linear",
"domain": {"data": "table", "field": "y"},
"range": "height"
}
],
"marks": [
{
"type": "line",
"from": {
"data": "table"
},
"encode": {
"enter": {
"x": {"scale": "xscale", "field": "x"},
"y": {"scale": "yscale", "field": "y"},
"stroke": {"value": "steelblue"},
"strokeWidth": {"value": 2}
}
},
"interpolate": "monotone"
}
]
}
| Тип | Плавность | Проходит через точки | Основное применение |
|---|---|---|---|
| linear | нет | да | аналитика |
| monotone | средняя | да | временные ряды |
| basis | высокая | не всегда | декоративные графики |
| cardinal | высокая | да | плавные тренды |
| catmull-rom | высокая | да | траектории |
| step | нет | да | дискретные состояния |
Предпочтительно:
"interpolate": "linear"
или:
"interpolate": "monotone"
Подходят:
"basis"
или:
"cardinal"
Используются:
"step"
"step-before"
"step-after"
Выбор метода интерполяции влияет не только на внешний вид графика, но и на интерпретацию данных:
Неверно выбранная интерполяция способна визуально исказить данные даже при корректных числовых значениях.