D3 - Разница между базисной и линейной интерполяцией в линии SVG

Я реализовал линейку с несколькими сериями, подобную той, что была приведена здесь здесь М. Бостоком и столкнулась с любопытной проблемой, которую я не могу объяснить сам, Когда я выбираю линейную интерполяцию и устанавливаю свои шкалы и ось, все правильно, а значения хорошо выровнены. Linear interpolation

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

Basis interpolation

Что здесь происходит? С монотонной настройкой я могу добиться почти такого же эффекта, как базовая интерполяция, но без проблемы синхронизации между линиями и осью. Тем не менее я хотел бы понять, что происходит.

Ответы

Ответ 1

Базовая интерполяция реализует бета-сплайн, который люди любят использовать в качестве функции интерполяции именно потому, что она сглаживает экстремальные пики. Это полезно, когда вы моделируете то, что вы ожидаете, чтобы плавно меняться, но иметь только четкие, редко воспроизводимые данные. Следствием этого является то, что итоговая строка не будет связывать все точки данных, изменяя внешний вид экстремальных значений.

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

Вот забавная демонстрация, чтобы играть с различными типами интерполяции линий: http://bl.ocks.org/mbostock/4342190

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

Basis interpolation