Простая «медианная» функция может создавать более плавные кривые по большей части негладкой кривой.
В противном случае можно использовать грубый или генетический алгоритм; пытаясь найти способ разбить данные на разделы, чтобы больше разделов = худшее решение и меньшая точность линий = худшее решение.
Другой способ был бы таким: начать с начала. Как только линия выйдет за пределы некоторого радиуса (например, на 3 выше или на 3 ниже первого), задайте для новой высоты среднее значение высоты текущей линии и предыдущего маркера.
Если вы продолжите делать это, он будет игнорировать небольшие колебания. Однако, если флуктуация была достаточно велика, она все равно произвела бы ее.