寻找一个可以在散点图上绘制~200,000个点的javascript图表库

时间:2011-09-21 08:08:46

标签: javascript charts jfreechart

我正在构建一个Web应用程序,其界面包含一个大的散点图,以便向用户提供其数据的概述。散点图大约有200,000个点。目前我正在使用JFreeChart Java库服务器端,它可以很好地绘制绘图 - 它只需要大约一秒钟来渲染它。

为了使我的应用程序更具交互性,我想切换到使用Javascript绘制图表客户端。这将允许我包括点,工具提示,可点击点等的交互式过滤。我已经尝试使用Google Charts,但这需要一个时间来渲染并使浏览器停滞不前。

有没有人知道可以应对这么大的数据集的Javascript图表库?或者我应该放弃这个想法并坚持使用JFreeChart?我不介意页面本身是否需要一段时间来加载(这是不可避免的,因为要传输大量数据)但我需要图表在合理的时间内更新以响应用户输入。

7 个答案:

答案 0 :(得分:12)

我的建议将转到Highcharts和Highcharts Stocks(http://www.highcharts.com)。

你可以在那里找到一个带有52k数据点的演示,包括缩放,工具提示和交互:http://www.highcharts.com/stock/demo/data-grouping,并且图表在我的(非常快)机器上构建大约需要90ms。

然而,非常大的数据集最有可能造成很大的性能问题,无论是网络传输,内存消耗,显示时间等等。此外,600k数据点相当于600个数据点/像素*每列400个图形或400个数据点,这没有任何意义。也许某些分组和/或过滤会很有用。

答案 1 :(得分:5)

对于那些今天正在查看此问题的人来说,DC.js是一个功能强大的图表库,用于绘制大型数据集,它建立在D3.js之上。它有几种图表类型,包括散点图,条形图和折线图。它们通过Square的crossfilter库运行,以便在绘图之前映射减少数据。

答案 2 :(得分:1)

作为临时或替代解决方案,请考虑通过JFreeChart部署Java-Web-Start。这个example提供了以交互方式更新图表外观的方法。

答案 3 :(得分:1)

如果你有可能不为IE7或IE8开发,那么对于大量数据点,你可能想尝试通过webgl利用你的显卡。我还没有尝试过,但three.js看起来很有趣。

答案 4 :(得分:1)

正如其他人所指出的那样 -

  

在有限的空间内创建这样一个高节点的交互式绘图   实际上毫无用处 - 这些点将是无法点击的和情节   至少可以说是人口过剩。

您可以使用当前视口和当前缩放级别来限制需要显示的内容

缩放级别分组和分解

您可以使用当前缩放级别相应地绘制图表,以便缩小视图显示组合在一起的信息,当您放大到特定区域时,可以将数据分解为更多图形。

我建议您将数据的小变量组合在一起,当您的用户放大时,您可以将当前可查看的数据分解为更小的数据块。

当前视口/仅绘制视口中的数据

仅在视口中绘制点 - 避免在每个缩放级别上绘制散点图的所有点。您的用户最有可能想要在一个点上进行集中 - 这就是他放大到这一点的原因 - 因此避免绘制该特定缩放级别的所有细分点。

不要仅限于绘制图书馆

在任何允许绘制形状/点的基本操作的Canvas / SVG库中实现散点图非常简单 - 由于这是一个相当高级的用例,我会放弃将自己限制在允许的库中的想法绘制并浏览允许SVG / Canvas绘图的通用库。


一个疯狂的想法,但我会尝试:

有一个库使用WebGL在HTML5画布上进行2D绘图(它使用图形卡以及CPU绘制图形),称为Pixi.js

它主要针对游戏开发,但是用它绘制散点图,缩放并允许点数上的点击事件是一个大满贯扣篮。

答案 5 :(得分:0)

您可能希望尝试使用raphael.js构建的图表库。 不确定它们的渲染性能,但它们是优秀的html5库。 值得一试。

http://g.raphaeljs.com/

答案 6 :(得分:0)

我建议使用图形ExtJs 4库

http://dev.sencha.com/deploy/ext-4.0.2a/examples/charts/Line.html

如果数据是大数据,则需要将数据传输为json。