Интерполяция линий: linear, monotone, step и другие

Интерполяция линий в Nivo определяет способ, которым набор дискретных точек превращается в непрерывную линию на графике. В контексте линейных графиков (Line Chart) параметр curve играет ключевую роль, так как он управляет алгоритмом построения сегментов между точками данных.

В основе большинства реализаций лежит модуль d3-shape, а Nivo лишь предоставляет удобный слой конфигурации поверх него. Выбор типа интерполяции влияет не только на визуальную плавность, но и на восприятие данных: от строгой линейной точности до сглаженных аналитических кривых.


Линейная интерполяция является самым прямолинейным способом соединения точек.

Каждая пара соседних значений соединяется отрезком прямой линии без каких-либо сглаживаний или дополнительных контрольных точек.

Основные характеристики:

  • абсолютная точность отображения исходных значений;
  • отсутствие искажений формы данных;
  • резкие углы в каждой точке перехода;
  • минимальная вычислительная сложность.

Использование linear оправдано в случаях, когда важна дискретность данных: финансовые показатели по дням, события, измерения с резкими скачками.

Пример конфигурации:

curve: 'linear'

Monotone: monotoneX и monotoneY

Monotone-интерполяция предназначена для сглаживания линии без появления ложных экстремумов (overshoot). Она сохраняет монотонность данных вдоль одной из осей.

monotoneX

Гарантирует монотонность по оси X. Используется, когда значения X строго возрастают (например, временные ряды).

Свойства:

  • предотвращает изгибы, создающие ложные пики;
  • сохраняет общую тенденцию;
  • визуально сглаживает переходы между точками;
  • подходит для временных шкал.
curve: 'monotoneX'

monotoneY

Аналогичен monotoneX, но применяется к вертикальной оси.

Используется реже, так как большинство графиков ориентированы по X как по времени.

curve: 'monotoneY'

Cardinal spline (cardinal)

Cardinal-интерполяция создаёт плавную кривую, проходящую через все точки, с управляемым уровнем натяжения (tension).

Особенности:

  • высокая плавность;
  • возможность регулировки “жёсткости” кривой;
  • потенциальное появление небольших артефактов при высокой кривизне;
  • визуально напоминает физическую упругую линию.

Хотя в Nivo напрямую параметр tension часто скрыт или фиксирован, поведение сохраняется как часть d3-shape.

curve: 'cardinal'

Basis interpolation

Basis-кривая не обязана проходить через сами точки данных. Она строится как аппроксимация, создавая максимально плавную линию.

Характерные особенности:

  • сильное сглаживание;
  • отсутствие острых углов;
  • отклонение от реальных точек;
  • подходит для визуализаций трендов, а не точных значений.

Используется, когда важна общая форма изменения, а не точные координаты.

curve: 'basis'

Natural spline

Natural интерполяция строит кривую, минимизирующую общую кривизну, что визуально делает линию “естественной”.

Свойства:

  • гладкость второго порядка;
  • физически правдоподобная форма;
  • отсутствие резких изгибов;
  • может отклоняться от исходных точек.
curve: 'natural'

Catmull-Rom spline

Catmull-Rom обеспечивает прохождение кривой через все точки с контролируемой плавностью.

Особенности:

  • линия всегда проходит через заданные точки;
  • высокая визуальная гладкость;
  • хорошая локальная управляемость формы;
  • возможны небольшие петли при экстремальных значениях.

Часто используется в интерфейсах, где важно сочетание точности и эстетики.

curve: 'catmullRom'

Step интерполяции

Step-интерполяция формирует ступенчатую линию, отражающую дискретные изменения значений.

stepBefore

Переход к новому значению происходит до точки по оси X.

Визуально:

  • горизонтальный участок до точки;
  • затем резкий вертикальный скачок.
curve: 'stepBefore'

stepAfter

Переход к новому значению происходит после точки.

Визуально:

  • сначала вертикальный скачок;
  • затем горизонтальное продолжение.
curve: 'stepAfter'

Step-интерполяции применяются в системах с дискретной логикой: состояния, события, переключатели, уровни доступа.


LinearClosed и замкнутые кривые

В некоторых конфигурациях используется замыкание линии, когда последняя точка соединяется с первой.

Применяется в:

  • радарных графиках;
  • циклических данных;
  • сравнительных визуализациях.

Хотя чаще это относится к area/radar, линейная логика сохраняется.


Поведение интерполяции при масштабировании

Интерполяция в Nivo не является статичной операцией: она пересчитывается при изменении:

  • масштаба осей;
  • плотности точек;
  • размеров контейнера;
  • фильтрации данных.

При увеличении количества точек некоторые типы кривых (basis, cardinal) становятся более гладкими, тогда как linear сохраняет сегментированность без изменений.


Влияние интерполяции на восприятие данных

Разные типы curve радикально меняют интерпретацию одной и той же серии значений:

  • linear подчёркивает точность и скачки;
  • monotone сохраняет тренд без искажений;
  • basis и natural создают “аналитический” визуальный эффект;
  • step акцентирует дискретность процессов;
  • catmullRom балансирует между точностью и плавностью.

Визуальная интерпретация становится частью семантики данных, а не только графическим стилем.


Комбинирование интерполяции с другими параметрами

Интерполяция тесно взаимодействует с:

Осью времени

При временных рядах monotoneX снижает риск ложных экстремумов, особенно при неравномерных данных.

Точками (points)

Даже при сглаженной кривой точки могут оставаться видимыми, компенсируя потерю точности.

Анимацией

При переходах между состояниями интерполяция влияет на траекторию движения линии, а не только на финальный результат.


Ограничения и артефакты

Каждый тип интерполяции имеет потенциальные проблемы:

  • basis и cardinal могут создавать визуально несуществующие пики;
  • step может искажать восприятие времени изменений;
  • catmullRom иногда формирует петли при резких скачках данных;
  • linear может выглядеть “ломано” при шумных данных.

Выбор всегда связан с компромиссом между точностью и визуальной гладкостью.


Практическая классификация выбора curve

Функционально типы интерполяции можно разделить на три группы:

Точные:

  • linear
  • stepBefore / stepAfter

Сглаженные с сохранением точек:

  • monotoneX / monotoneY
  • catmullRom

Сглаженные аппроксимирующие:

  • basis
  • natural
  • cardinal