Есть ли у highcharts (или vaadin) встроенные возможности для использования алгоритма вроде Рамера-Дугласа-Пекера?

Используя диаграммы Vaadin (которые в конечном итоге используют HighCharts), я пытаюсь построить линейный график с более чем 10 000 точек. Это на самом деле работает достаточно быстро (пара секунд на построение). Однако мне интересно, может ли это быть намного быстрее, поскольку я столкнулся с аналогичной проблемой при использовании диаграмм JavaFx и обнаружил, что люди реализовали решение, использующее «алгоритм Рамера-Дугласа-Пекера», чтобы уменьшить количество точек данных таким образом. что это в основном заметно для человеческого глаза, когда оно графически. (Вот исходный ответ от SO: Проблема производительности с JavaFX LineChart с 65 000 точек данных).

Итак, у highcharts уже есть такая встроенная функциональность? Если нет, то Ваадин? Или мне нужно воссоздать эту логику в Vaadin, что означает, что мне в конечном итоге нужно найти библиотеку Java для алгоритма Рамера-Дугласа-Пекера....


person Jonathan Sylvester    schedule 14.02.2019    source источник


Ответы (2)


К сожалению, Highcharts не имеет встроенного "алгоритма Рамера-Дугласа-Пекера". Однако у него есть модуль ускорения, который позволяет отображать тысячи точек за миллисекунды.

Модуль Boost позволяет отображать определенные типы серий с помощью WebGL вместо стандартного SVG. Это позволяет отображать сотни тысяч точек данных за миллисекунды. В дополнение к рендерингу WebGL он экономит время, по возможности пропуская обработку и проверку данных.

Справочник по API:

Демонстрация:


Более того, с помощью Highstock вы можете использовать группировку данных.

Группировка данных — это концепция выборки значений данных в более крупные блоки для облегчения чтения и повышения производительности диаграмм JavaScript.

Справочник по API:

Демонстрация:

person Wojciech Chmiel    schedule 14.02.2019

Для большинства типов диаграмм при создании диаграмм Vaadin на самом деле имеет смысл применить алгоритм для уменьшения количества точек данных в логике на стороне сервера, например, при копировании данных из исходного хранилища данных в DataSeries, который вы используете в диаграмме. Это сокращает не только время рендеринга, но и время загрузки данных в браузер.

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

person Tatu Lund    schedule 14.02.2019
comment
Возможно ли, начиная с Vaadin 12, включить модуль Boost, описанный выше Войцехом Химиэлем, а также Highstock API? (Если это так, быстрый пример был бы очень полезен — я нахожу синтаксис для этих не-Java вызовов API очень сложным, поэтому я использую Vaadin.) - person Jonathan Sylvester; 15.02.2019