【问题标题】:Real-time Java graph / chart library? [closed]实时Java图形/图表库? [关闭]
【发布时间】:2023-03-15 02:31:01
【问题描述】:

Java graph or chart library 上有一个较早的帖子,发现 JFreeChart 非常好,但是,作为stated in its FAQ,它不适合实时渲染。

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

【问题讨论】:

  • 您是指实时还是“摊销”实时? (后者的响应速度足以让人类看起来是实时的,但不能保证偶尔它可能会变慢。如果我需要对某些东西进行硬实时保证,它通常与传播延迟限制有关,并且通常与人为因素无关。)
  • 我的意思是后者——看起来实时就足够了。这可能意味着每秒重绘 10 次。

标签: java charts graph real-time


【解决方案1】:

FAQ 实际上说的是 JFreeChart 不支持硬实时图表,这意味着图表不会在新数据到达时或之后的确定时间间隔更新。但是我发现 JFreeChart 可用于您所描述的那种应用程序。您可以实现每秒 1 次更新,这很好。我不认为人眼能比这更快地跟随事物。

如果你想要更多的东西,我怀疑你会在 Java(甚至是另一种语言)中找到任何东西。我们使用的操作系统并非设计为实时的。您不能保证他们会在事件发生后的最短时间间隔内做出响应。需要与硬件驱动程序紧密集成才能每秒显示超过 1-10 帧。

但是,如果您正确设计应用程序,操作系统会快速响应,并且您的应用程序可以轻松显示“实时”图表(即每秒更新一次的图表)。只是不要在紧急情况下使用您的应用程序来关闭阀门!

【讨论】:

  • 好吧,我们在这里处于某种边界。如果数据变化得更快,1/s 对眼睛来说肯定是生涩的。 10/s 就可以了,但 JFreeChart 可能做不到。
  • 如果你计算数据,那么你可以用 Java 做 10 f/s。然而,我相信如果数据来自数据采集设备,就没有办法做到这一点。在这种情况下,您需要直接与司机沟通;这将是一个更难解决的问题。
  • @kgiannakakis:?!你的意思是 10f/s 作为 10 个完整帧,还是每秒 10 次增量更新?我正在寻找一个带状图表记录器,1 更新/秒太慢了。此外,还有很多数据采集硬件模块,速度非常快,10Ksamples/second 不算什么。 (他们中的任何一个是否可以与 Java 一起工作是另一回事.... :( argh)
  • 抱歉,我不能同意...如果这是真的,我们将如何获得那些具有近乎逼真的图形的游戏?我们可以创建虚拟世界,但不能保证...图表的良好更新率?
  • 对于仍在查看此内容的任何人,我目前正在使用 JFreeChart 生成一个“实时”图表,每秒最多更新 100 次(每次添加和删除单个数据点,基本上会改变全套)。我并不是说它实际上是在 10 毫秒的时间内完成每一帧,但它并没有落后于数据,而且它看起来对我的目的来说足够实时。
【解决方案2】:

【讨论】:

    【解决方案3】:

    刚刚偶然发现有关如何使用visualvm charting library 的说明。看起来很不错!

    【讨论】:

    • 是的!虽然我发现 JFreeChart 足以满足我的需求,但这几乎正是我最初想要的。
    【解决方案4】:

    看看processing——它是一个开源的、基于java的环境,专为各种动画可视化而设计。

    【讨论】:

    • 你确定它本身不是一种可能受Java影响的编程语言吗? en.wikipedia.org/wiki/Processing_(programming_language)
    • 你是对的。但是:“[...] 是用 Java 编写的。用 Processing 编写的程序也被翻译成 Java,然后作为 Java 程序运行。用 Java 和 Processing 编写的程序 [...]”(来自 processing.org/reference/compare/java.html)所以它会与现有的 java 模型和库集成。
    • 本教程 (processing.org/learning/tutorials/eclipse) 解释了如何将处理库集成到现有的 java 项目中——它专注于 eclipse,但从概念上讲,这将适用于任何其他 java IDE...
    • 语法简洁看起来有点像Groovy。感谢您的澄清。
    【解决方案5】:

    好吧,如果它必须是 Java,那么您可能想要研究这些。

    【讨论】:

      【解决方案6】:

      您可能已经找到了一个很好的解决方案,但如果没有,我最近在一个框架上做了一些工作,用于生成 2D 图表,允许以每秒超过 50 次更改的速度进行实时更新。

      最初的目的是在网页的滚动区域模仿图表记录器的外观,但我相信这种方法有更广泛的应用。

      如果有人感兴趣,可以在Chart Recorder Demo 找到演示。

      外观由模板定义 (www.journeylog.co.uk/chart/templates/chartRecorder.xml)。一项功能是能够使用 ExplorerCanvas 在服务器或浏览器中指定绘图。

      如果有人感兴趣,我可以为它启动一个开源项目。

      【讨论】:

      • 是的,我发现 JFreeChart 在我的情况下是“足够实时的”。无论如何,你的演示看起来相当令人印象深刻!开源它肯定会受到赞赏:-)
      • 非常好。我正在寻找适用于 Android 的 Java 图表,您的解决方案可能适用...嗯
      【解决方案7】:

      足够快的实时是swtchart,至少在我的经验中。即使有 很多 数据。不要被版本号吓跑,是的,它是一个相当新的 API,但我成功使用它没有问题。

      顾名思义,它基于SWT,使用原生OS绘图。它还为快速绘制做了一些巧妙的优化,比如不绘制数据集中的所有点(参见大型系列示例片段)。

      【讨论】:

        【解决方案8】:

        这似乎是一个不错的候选人。

        http://jchart2d.sourceforge.net/

        演示:

        http://jchart2d.sourceforge.net/applet.shtml

        【讨论】:

          【解决方案9】:

          JCCkit 是一个很好的库,它的目标是更少的内存,尤其是在嵌入式环境中:https://sourceforge.net/projects/jcckit

          占用少于

          【讨论】:

            【解决方案10】:

            您可以挖掘 NetBeans 的源代码。分析器实时绘制各种事物的图形,例如内存使用情况。

            【讨论】:

              【解决方案11】:

              SWT XYGraph 可以使用您自己的数据提供者绘制数据,因此您可以创建一个提供实时数据的实时数据提供者。使用 SWTChart 和 JFreeChart,您必须为其准备整个数组。

              【讨论】:

                【解决方案12】:

                这个问题在以下方面得到了很好的回答: Java Real time graph plotting

                由于 VisualVM 包含 Charting API,并且该 API 包含在 JDK 中,因此您可以使用良好/快速的图表 API。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-12-14
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-10-09
                  • 2010-10-11
                  • 2010-12-07
                  相关资源
                  最近更新 更多