最近要用到实时曲线图,在网上大概找了一下,有两种实现方式,一种就是JFreeChart的官方实例MemoryUsageDemo.java.通过一个实现java.Swing.Timer的内部类,在其监听器中将实时数据添加进TimeSeries,由于Timer是会实时执行的,所以这个方法倒是没有什么问题,可以参考代码。
另一种方式就是将实时类实现Runnable接口,在其run()方法中,通过无限循环将实时数据添加进TimeSeries,下面是较简单的实现代码:
//RealTimeChart .java 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 RealTimeChart extends ChartPanel implements Runnable { private static TimeSeries timeSeries; private long value=0; public RealTimeChart(String chartContent,String title,String yaxisName) { super(createChart(chartContent,title,yaxisName)); } private static JFreeChart createChart(String chartContent,String title,String yaxisName){ //创建时序图对象 timeSeries = new TimeSeries(chartContent,Millisecond.class); TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(timeSeries); JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(title,"时间(秒)",yaxisName,timeseriescollection,true,true,false); XYPlot xyplot = jfreechart.getXYPlot(); //纵坐标设定 ValueAxis valueaxis = xyplot.getDomainAxis(); //自动设置数据轴数据范围 valueaxis.setAutoRange(true); //数据轴固定数据范围 30s valueaxis.setFixedAutoRange(30000D); valueaxis = xyplot.getRangeAxis(); //valueaxis.setRange(0.0D,200D); return jfreechart; } public void run() { while(true) { try { timeSeries.add(new Millisecond(), randomNum()); Thread.sleep(300); } catch (InterruptedException e) { } } } private long randomNum() { System.out.println((Math.random()*20+80)); return (long)(Math.random()*20+80); } } //Test.java import java.awt.BorderLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; public class Test { /** * @param args */ public static void main(String[] args) { JFrame frame=new JFrame("Test Chart"); RealTimeChart rtcp=new RealTimeChart("Random Data","随机数","数值"); frame.getContentPane().add(rtcp,new BorderLayout().CENTER); frame.pack(); frame.setVisible(true); (new Thread(rtcp)).start(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent windowevent) { System.exit(0); } }); } }
这两中方法都有一个问题,就是每实现一个图就要重新写一次,因为实时数据无法通过参数传进来,在想有没有可能通过setXXX()方式传进实时数据,那样的话就可以将实时曲线绘制类封装起来,而只需传递些参数即可,或者谁有更好的办法?
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍JFreeChart简单实现光滑曲线绘制,包括了JFreeChart简单实现光滑曲线绘制的使用技巧和注意事项,需要的朋友参考一下 用JFreeChart绘制光滑曲线,利用最小二乘法数学原理计算,供大家参考,具体内容如下 绘制图形: 代码: FittingCurve.java 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍tensorboard实现同时显示训练曲线和测试曲线,包括了tensorboard实现同时显示训练曲线和测试曲线的使用技巧和注意事项,需要的朋友参考一下 在做网络训练实验时,有时需要同时将训练曲线和测试曲线一起显示,便于观察网络训练效果。经过很多次踩坑后,终于解决了。 具体的方法是:设置两个writer,一个用于写训练的数据,一个用于写测试数据,并且这两个writer分别存在trai
封装了 html+css+js 的曲线图,可以通过代码实时动态更新和显示数据。 本代码中的数据都是模拟的,如果有真实数据替换掉即可。 [Code4App.com]
本文向大家介绍OpenGL实现Bezier曲线的方法示例,包括了OpenGL实现Bezier曲线的方法示例的使用技巧和注意事项,需要的朋友参考一下 Bezier曲线的形状是通过一组多边折线(特征多边形)的各顶点唯一地定义出来的。在这组顶点中: (1)只有第一个顶点和最后一个顶点在曲线上; (2)其余的顶点则用于定义曲线的导数、阶次和形状; (3)第一条边和最后一条边则表示了曲线在两端点处的切线方向
本文向大家介绍Android实现价格走势自定义曲线图,包括了Android实现价格走势自定义曲线图的使用技巧和注意事项,需要的朋友参考一下 本文是引用开源图表库框架 MPAndroidChart的LineChart 地址:https://github.com/PhilJay/MPAndroidChart 1.需求: (1)动态添加RadioButton,点击改变下面的LineChart数据 (2)
本文向大家介绍JS highcharts实现动态曲线代码示例,包括了JS highcharts实现动态曲线代码示例的使用技巧和注意事项,需要的朋友参考一下 Highcharts是一个制作图表的纯Javascript类库, 主要特性如下: 兼容性:兼容当今所有的浏览器,包括iPhone、IE和火狐等等; 对个人用户完全免费; 纯JS,无BS; 支持大部分的图表类型:直线图,曲线
本文向大家介绍Python实现曲线点抽稀算法的示例,包括了Python实现曲线点抽稀算法的示例的使用技巧和注意事项,需要的朋友参考一下 本文介绍了Python实现曲线点抽稀算法的示例,分享给大家,具体如下: 目录 何为抽稀 道格拉斯-普克(Douglas-Peuker)算法 垂距限值法 最后 正文 何为抽稀 在处理矢量化数据时,记录中往往会有很多重复数据,对进一步数据处理带来诸多不便。多余的数据一
本文向大家介绍批处理BAT实现正弦曲线和抛物线代码,包括了批处理BAT实现正弦曲线和抛物线代码的使用技巧和注意事项,需要的朋友参考一下 先奉上正弦曲线的: 根据悬崖之树的代码改造而成,可以说是真正的抛物线了。 函数解析式:f(x)=-x2-1