JFreeChart实现实时曲线图

最近要用到实时曲线图,在网上大概找了一下,有两种实现方式,一种就是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()方式传进实时数据,那样的话就可以将实时曲线绘制类封装起来,而只需传递些参数即可,或者谁有更好的办法?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • jfreechart插件将数据展示成饼状图、柱状图和折线图

    本文以展示柱状图为例进行介绍,当然这仅仅是一种方法而已:还有很多方法可以用于展示图表,例如自定义图表标签.使用jfreechart插件等: 1.导入js文件,包含了很多展示方法: 复制代码 代码如下: <script type="text/javascript" src=<select:link page="/js/ChartObject.js"/>></script> <script type="text/jav

  • JFreeChart简单实现光滑曲线绘制

    用JFreeChart绘制光滑曲线,利用最小二乘法数学原理计算,供大家参考,具体内容如下 绘制图形: 代码: FittingCurve.java package org.jevy; import java.util.ArrayList; import java.util.List; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; i

  • JFreeChart插件实现的折线图效果实例

    本文实例讲述了JFreeChart插件实现的折线图效果.分享给大家供大家参考,具体如下: package com.lei.jfreechart; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; imp

  • JFreeChart折线图的生成方法

    JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计.JFreeChart可生成饼图(pie charts).柱状图(bar charts).散点图(scatter plots).时序图(time series).甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联. 折线图的实例 package com

  • JFreeChart动态画折线图的方法

    本文实例为大家分享了JFreeChart动态画折线图的具体代码,供大家参考,具体内容如下 每隔一秒画一次,一分钟后重新画 需要的jar包是:gnujaxp.jar,jcommon-1.0.16.jar,jfreechart-1.0.13.jar public class JFreeZheXianTest{ public static XYSeries xyCPUseries = new XYSeries("CPU"); public static int hundroud = 0; p

  • jfreechart画折线图的方法

    JFreeChart 是开放源代码站点SourceForge.net 上的一个 JAVA 项目,它主要用来各种各样的图表,这些图表包括:饼图.柱状图 ( 普通柱状图以及堆栈柱状图 ).线图.区域图.分布图.混合图.甘特图以及一些仪表盘等等. 应用jfreechart来画图需要两个jar包:jfreechart.jar和jcommon.jar,下载地址. 下面是一个画折线图的例子: package yuth.jfree.demo; /** * 使用 categoryDataset 数据集创建折线图

  • JFreeChart实现实时曲线图

    最近要用到实时曲线图,在网上大概找了一下,有两种实现方式,一种就是JFreeChart的官方实例MemoryUsageDemo.java.通过一个实现java.Swing.Timer的内部类,在其监听器中将实时数据添加进TimeSeries,由于Timer是会实时执行的,所以这个方法倒是没有什么问题,可以参考代码. 另一种方式就是将实时类实现Runnable接口,在其run()方法中,通过无限循环将实时数据添加进TimeSeries,下面是较简单的实现代码: //RealTimeChart .j

  • c# 实时曲线图示例代码

    示例目的:使用时间器添加曲线图的点,以达到实时描绘曲线图的效果.X轴显示时分,Y轴显示0-20的随机数 1. 必须安装DevExpress控件,没有安装的朋友可以使用下面的链接下载安装 https://www.jb51.net/softs/547627.html 2. 新建Windows窗体应用程序,直接在工具箱搜索ChartControl并使用改组件 3. 添加曲线图,并设置其属性 当拖拉该组件到窗体设计页面时,会弹出[Chart Designer],可在此处添加曲线图,并设置其属性 3.1.

  • C#绘制实时曲线图的方法详解

    在终端机器上的曲线显示本打算用控件,可控件折腾好长时间也没弄顺,还是自己写的好使,记录下来后面再改进. //绘图部分的定义 Int32 Draw_Top;//绘画Y起点 Int32 Draw_Left;//绘画X起点 Int32 Draw_EdgeWidth;//X边缘宽度 Int32 Draw_EdgeHeight;//Y边缘高度 Int32 Draw_RangeWidth;//绘画范围宽度 Int32 Draw_RangeHeight;//绘画范围高度 Double[] XTDYData =

  • ASP.NET中实时图表的实现方法分享

    在对大批量的数据进行分析比较时,最常用也是最直观明了的表现方法莫过于绘制趋势图表.一般情况下,我们利用EXCEL制作各种类型的趋势图表,但它们都是基于静态数据的,即数据是事先整理好的而不 是动态生成的.如果在网上发布,只能将绘制好的图表以静态GIF图像发布,这无法从根本上满足不同用户对不同数据的需求. ASP擅长服务器端的Web编程,操作后台数据库更是它的强项.但是用ASP制作实时数据库图表有点困难,因为ASP本身并不支持图表功能,只能借助第三方控件进行开发,如VB的MSChart控件.微软推出

  • jsp JFreeChart使用心得与例子

    当前的JFreeChart的最新版本为jfreechart-1.0.11.zip.可以到http://www.jfree.org/jfreechart/index.html找到 二.JFreeChart的基本使用 不论创建的是什么图,JFreeChart都遵循以下的这个使用步骤: 1.建立Dataset.所有的数据都存放在Dataset中的.(创建一个数据源(dataset)来包含将要在图形中显示的数据) 2.建立JFreeChart.将dataset中的数据导入到JFreeChart中.(创建

  • java类中生成jfreechart,返回图表的url地址 代码分享

    web.xml中设置: 复制代码 代码如下: <servlet> <servlet-name>DisplayChart</servlet-name> <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class> </servlet > <servlet-mapping> <servlet-name>DisplayChart</ser

  • 在tensorflow下利用plt画论文中loss,acc等曲线图实例

    直接上代码: fig_loss = np.zeros([n_epoch]) fig_acc1 = np.zeros([n_epoch]) fig_acc2= np.zeros([n_epoch]) for epoch in range(n_epoch): start_time = time.time() #training train_loss, train_acc, n_batch = 0, 0, 0 for x_train_a, y_train_a in minibatches(x_trai

  • jquery select插件异步实时搜索实例代码

    一.先看看效果. 二.做此插件的原因. 1.数据量过大(几千.几万条),无法一次性全部加载. 2.现有插件各不相同,无法满足功能需求. 3.美观性,可控性不足. 三.如何使用. 1.html和js <select id="unit"></select> <script type="text/javascript" src="/demo/thirdparty/jquery/jquery-1.8.3.min.js">

  • 纯JavaScript实现实时反馈系统时间

    用javascript反馈系统时间 运用知识 JavaScript HTML DOM HTML DOM 中的setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭.由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数. 语法setInterval(code,milliseconds) code--代码(可以为函数) milliseconds--在此调用的时间(毫秒) 因此,我们想让反馈的系统时间动起

  • AngularJs实现聊天列表实时刷新功能

    昨天在做app的聊天列表时,遇到了一个问题,消息监听器监听到了一个新的消息,但是如果这时已经处于消息列表的页面那么消息列表并不会及时更新. 我的想法是在service层中的监听器方法里,当监听到了一个新的消息,那么就在根作用域中发出一个广播,告诉controller层需要去获取最新的消息列表了. service层中发出广播: controller层中接听广播: rootScope是所有scope的父级 它的广播(broadcast)和监听(on) 可以在无交集的controller间使用 sco

随机推荐