gpt4 book ai didi

java - Java中的实时绘图

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:10 27 4
gpt4 key购买 nike

我有一个每秒更新变量大约 5 到 50 次的应用程序,我正在寻找某种方法来实时绘制此变化的连续 XY 图。

虽然 JFreeChart 不推荐用于如此高的更新率,但许多用户仍然说它适合他们。我试过使用 this demo 并修改它以显示随机变量,但它似乎一直占用 100% 的 CPU 使用率。即使我忽略了这一点,我也不想局限于 JFreeChart 的 ui 类来构建表单(尽管我不确定它的功能到底是什么)。是否可以将它与 Java 的“表单”和下拉菜单集成在一起? (在 VB 中可用)否则,有没有我可以研究的替代方案?

编辑: 我是 Swing 的新手,所以我整理了一个代码来测试 JFreeChart 的功能(同时避免使用 JFree 的 ApplicationFrame 类,因为我'我不确定这将如何与 Swing 的组合框和按钮一起工作)。现在,图表正在立即更新,CPU 使用率很高。是否可以使用 new Millisecond() 缓冲该值并每秒更新两次?另外,我可以在不中断 JFreeChart 的情况下将其他组件添加到 JFrame 的其余部分吗?我该怎么做? frame.getContentPane().add(new Button("Click")) 似乎覆盖了图形。

package graphtest;

import java.util.Random;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;

public class Main {
static TimeSeries ts = new TimeSeries("data", Millisecond.class);

public static void main(String[] args) throws InterruptedException {
gen myGen = new gen();
new Thread(myGen).start();

TimeSeriesCollection dataset = new TimeSeriesCollection(ts);
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"GraphTest",
"Time",
"Value",
dataset,
true,
true,
false
);
final XYPlot plot = chart.getXYPlot();
ValueAxis axis = plot.getDomainAxis();
axis.setAutoRange(true);
axis.setFixedAutoRange(60000.0);

JFrame frame = new JFrame("GraphTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ChartPanel label = new ChartPanel(chart);
frame.getContentPane().add(label);
//Suppose I add combo boxes and buttons here later

frame.pack();
frame.setVisible(true);
}

static class gen implements Runnable {
private Random randGen = new Random();

public void run() {
while(true) {
int num = randGen.nextInt(1000);
System.out.println(num);
ts.addOrUpdate(new Millisecond(), num);
try {
Thread.sleep(20);
} catch (InterruptedException ex) {
System.out.println(ex);
}
}
}
}

}

最佳答案

如果您的变量更新得那么快,则没有必要每次都更新图表。

您是否考虑过缓冲变量变化,并在不同的线程上刷新图表,比如说,每 5 秒刷新一次?您应该会发现 JFreeChart 可以很好地处理这样的更新率。

由于 JFreeChart 是一个普通的桌面库,您可以很容易地将它与标准的 Swing 应用程序集成。或者,您可以使用它通过 Web 应用程序绘制图表(通过呈现为 JPEG/PNG 等。JFreeChart 也可以自动生成图像映射,因此您可以使用鼠标悬停等)

关于java - Java中的实时绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1389285/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com