Имеют ли высокие диаграммы (или ваадин) встроенные способности для использования алгоритма, такого как Рамер-Дуглас-Пеккер?

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

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

2 ответа

Решение

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

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

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

Демо - версия:


Более того, используя Highstock Вы можете использовать DataGrouping.

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

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

Демо - версия:

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

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

Другие вопросы по тегам