1

使用 Vaadin 的图表(最终使用 HighCharts),我试图绘制一个超过 10,000 个点的折线图。它实际上工作得相当快(绘制几秒钟)。但是,我想知道它是否可以更快,因为我在使用 JavaFx 图表时遇到了类似的问题,并发现人们已经使用“Ramer–Douglas–Peucker 算法”实现了一个解决方案,以这种方式减少数据点的数量绘制图形时,人眼基本上可以注意到它。(这是 SO 的原始答案:Performance issue with JavaFX LineChart with 65000 data points)。

那么,highcharts 是否已经具有这样的内置功能?如果没有,Vaadin 呢?或者,我是否需要在 Vaadin 中重新创建这个逻辑,这意味着我最终需要为 Ramer-Douglas-Peucker 算法找到一个 Java 库......

4

2 回答 2

1

不幸的是,Highcharts没有内置“Ramer–Douglas–Peucker 算法”。但是,它有一个boost 模块,可以在几毫秒内渲染数千个点。

Boost 模块允许 WebGL 渲染某些系列类型,而不是默认的 SVG。这允许在几毫秒内呈现数十万个数据点。除了 WebGL 渲染之外,它还通过尽可能跳过数据的处理和检查来节省时间。

API参考:

演示:


更重要的是,使用Highstock你可以使用dataGrouping

数据分组是将数据值采样到更大的块中的概念,以简化可读性并提高 JavaScript 图表的性能。

API参考:

演示:

于 2019-02-14T12:49:42.833 回答
1

对于大多数图表类型,当您使用 Vaadin 图表时,应用算法来减少服务器端逻辑中的数据点数量实际上更有意义,例如,将数据从原始数据复制到您在图表中使用的 DataSeries 时。这不仅减少了渲染时间,还减少了将数据加载到浏览器的时间。

如果需要,我还建议将线性回归计算为服务器端的附加两点 DataSeries。

于 2019-02-14T19:27:34.633 回答