实时Java图表库?

29

之前有一个关于Java图表库的讨论,其中JFreeChart被认为是相当不错的选择,但是,正如其FAQ中所述,它并不适用于实时渲染。

有人能推荐一个支持实时渲染的类似库吗?只需要一些基本的xy渲染,例如从数据采集系统获取电压信号,并将其绘制出来(时间在x轴上,电压在y轴上)。


你是指实时还是“分摊”的实时?(后者是指对于人类来说响应足够快,看起来像实时的东西,但不能保证偶尔不会变慢。如果我需要在某些方面有硬实时保证,通常与传播延迟限制有关,而不是与人为因素有关。) - Jason S
我的意思是后者 - 它足够看起来是实时的。这可能意味着每秒大约10次重绘。 - Joonas Pulakka
12个回答

9
实际上FAQ所说的是JFreeChart不支持硬实时图表,这意味着当新数据到达或在确定性间隔后,图表不会更新。但是我发现JFreeChart可以用于您描述的应用程序。您可以实现每秒1次更新,这很好。我认为人眼无法跟随比这更快的东西。
如果您想要更多,请勿使用Java(甚至其他语言)找到任何东西。我们使用的操作系统并非设计用于实时。您不能保证它们将在事件后以最小间隔响应。需要与硬件驱动程序进行紧密集成才能显示超过1-10帧每秒的内容。
但是,如果您正确设计了应用程序,则操作系统将快速响应,并且您的应用程序可以轻松显示“实时”图形(即每秒更新一次的图形)。只是不要在紧急情况下使用您的应用程序关闭阀门!

3
好的,我们现在处于一个边界位置。如果数据变化非常快,1/s对于眼睛来说肯定是不连贯的。10/s则可以接受,但JFreeChart可能无法做到。 - Joonas Pulakka
+1 我使用了JFreeChart来制作实时股票价格图表。 - Michael Myers
1
@kgiannakakis:?!你是指每秒10个完整帧还是每秒10个增量更新?我正在寻找一款条形图记录仪,每秒1次更新太慢了。此外,有很多数据采集硬件模块非常快,每秒10K样本根本不算什么。(它们是否能与Java一起使用是另一回事....:(呃) - Jason S
12
抱歉,我完全不同意... 如果那是真的,那我们如何得到那些几乎逼真图形的游戏呢?我们可以创建虚拟世界,但不能保证良好的更新速率...图表吗? - Rekin
7
如果有人仍在关注这个问题,我目前正在使用JFreeChart生成一个“实时”图表,每秒最多进行100次更新(每次更新添加和删除一个数据点,基本上是在移动整个数据集)。 我不是说它确切地每帧都在10毫秒内完成,但它不会落后于数据,并且对于我的目的来说看起来足够实时。 - sonicwave
显示剩余2条评论


6

刚刚偶然发现了一篇关于如何使用visualvm图表库的介绍。看起来非常不错!


1
是的!这基本上就是我最初寻找的,尽管我发现JFreeChart对我的情况已经足够了。 - Joonas Pulakka

5
您可能已经找到了一个好的解决方案,但如果没有,我最近对一个框架进行了一些工作,用于生成2D图表,允许以每秒50多次的速度进行实时更新。
最初的目的是在网页的滚动区域中模仿图表记录器的外观,但我认为这种方法具有更广泛的应用。
如果有人感兴趣,可以在Chart Recorder Demo上找到演示。
外观由模板定义(www.journeylog.co.uk/chart/templates/chartRecorder.xml)。其中一个特点是能够指定在服务器上或使用ExplorerCanvas在浏览器中进行绘制。
如果有人感兴趣,我可以开始一个开源项目。

是的,我发现在我的情况下,JFreeChart足够“实时”。不管怎样,你的演示看起来非常令人印象深刻!开源它肯定会受到赞赏 :-) - Joonas Pulakka
非常好。我正在寻找适用于Android的Java图表,您的解决方案可能是可适应的... 嗯嗯 - Brad Hein

5
请查看processing——它是一个开源的、基于Java的环境,专门用于各种动态可视化。

1
你确定Processing不是一门编程语言,受Java的影响吗?http://en.wikipedia.org/wiki/Processing_(programming_language) - Adeel Ansari
你说得对。但是:“[...]是用Java编写的。使用Processing编写的程序也会被翻译成Java,然后作为Java程序运行。使用Java和Processing编写的程序[...]”(来自http://www.processing.org/reference/compare/java.html),因此它将与现有的Java模型和库集成。 - Rahel Lüthy
这个教程(http://www.processing.org/learning/tutorials/eclipse)解释了如何将processing库集成到现有的Java项目中,重点是针对eclipse进行说明,但从概念上讲,在任何其他Java IDE中也可以使用。 - Rahel Lüthy
语法的简洁性看起来有点像 Groovy。感谢澄清。 - Adeel Ansari

5

4
快到足以实时绘制的是swtchart,至少在我的经验中。即使有大量数据也不要被版本号吓到,是一个相当新的API,但我成功地使用它而没有问题。
正如其名称所示,它基于SWT,该API使用本机操作系统绘图。此外,它还进行了一些聪明的优化,以实现快速绘图,例如不绘制数据集中的所有点(请参见大型系列示例片段)。

2

2

1
你可以在NetBeans的源代码中查找。分析器可以实时绘制各种东西,如内存使用情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接