`
favey
  • 浏览: 121604 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

JFreeChart实现实时曲线图

    博客分类:
  • JSE
阅读更多
        最近要用到实时曲线图,在网上大概找了一下,有两种实现方式,一种就是JFreeChart的官方实例MemoryUsageDemo.java.通过一个实现java.Swing.Timer的内部类,在其监听器中将实时数据添加进TimeSeries,由于Timer是会实时执行的,所以这个方法倒是没有什么问题,可以参考代码。
      另一种方式就是将实时类实现Runnable接口,在其run()方法中,通过无限循环将实时数据添加进TimeSeries,下面是较简单的实现代码:
java 代码
 
  1. //RealTimeChart .java  
  2. import org.jfree.chart.ChartFactory;  
  3. import org.jfree.chart.ChartPanel;  
  4. import org.jfree.chart.JFreeChart;  
  5. import org.jfree.chart.axis.ValueAxis;  
  6. import org.jfree.chart.plot.XYPlot;  
  7. import org.jfree.data.time.Millisecond;  
  8. import org.jfree.data.time.TimeSeries;  
  9. import org.jfree.data.time.TimeSeriesCollection;  
  10.   
  11. public class RealTimeChart extends ChartPanel implements Runnable  
  12. {  
  13.     private static TimeSeries timeSeries;  
  14.     private long value=0;  
  15.       
  16.     public RealTimeChart(String chartContent,String title,String yaxisName)  
  17.     {  
  18.         super(createChart(chartContent,title,yaxisName));  
  19.     }  
  20.       
  21.     private static JFreeChart createChart(String chartContent,String title,String yaxisName){  
  22.         //创建时序图对象  
  23.         timeSeries = new TimeSeries(chartContent,Millisecond.class);  
  24.         TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(timeSeries);  
  25.         JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(title,"时间(秒)",yaxisName,timeseriescollection,true,true,false);  
  26.         XYPlot xyplot = jfreechart.getXYPlot();  
  27.         //纵坐标设定  
  28.         ValueAxis valueaxis = xyplot.getDomainAxis();  
  29.         //自动设置数据轴数据范围  
  30.         valueaxis.setAutoRange(true);  
  31.         //数据轴固定数据范围 30s  
  32.         valueaxis.setFixedAutoRange(30000D);  
  33.   
  34.         valueaxis = xyplot.getRangeAxis();  
  35.         //valueaxis.setRange(0.0D,200D);  
  36.   
  37.         return jfreechart;  
  38.       }  
  39.   
  40.     public void run()  
  41.     {  
  42.         while(true)  
  43.         {  
  44.         try  
  45.         {  
  46.             timeSeries.add(new Millisecond(), randomNum());  
  47.             Thread.sleep(300);  
  48.         }  
  49.         catch (InterruptedException e)  {   }  
  50.         }         
  51.     }  
  52.       
  53.     private long randomNum()  
  54.     {     
  55.         System.out.println((Math.random()*20+80));        
  56.         return (long)(Math.random()*20+80);  
  57.     }  
  58. }  
  59.   
  60. //Test.java  
  61. import java.awt.BorderLayout;  
  62. import java.awt.event.WindowAdapter;  
  63. import java.awt.event.WindowEvent;  
  64. import javax.swing.JFrame;  
  65.   
  66. public class Test  
  67. {  
  68.   
  69.     /** 
  70.      * @param args 
  71.      */  
  72.     public static void main(String[] args)  
  73.     {  
  74.     JFrame frame=new JFrame("Test Chart");  
  75.     RealTimeChart rtcp=new RealTimeChart("Random Data","随机数","数值");  
  76.     frame.getContentPane().add(rtcp,new BorderLayout().CENTER);  
  77.     frame.pack();  
  78.     frame.setVisible(true);  
  79.     (new Thread(rtcp)).start();  
  80.     frame.addWindowListener(new WindowAdapter()   
  81.     {  
  82.         public void windowClosing(WindowEvent windowevent)  
  83.         {  
  84.             System.exit(0);  
  85.         }  
  86.   
  87.     });  
  88.     }  
  89. }

          这两中方法都有一个问题,就是每实现一个图就要重新写一次,因为实时数据无法通过参数传进来,在想有没有可能通过setXXX()方式传进实时数据,那样的话就可以将实时曲线绘制类封装起来,而只需传递些参数即可(或者谁有更好的办法??)。
  • 描述: Test的运行结果
  • 大小: 35.8 KB
  • MemoryUsageDemo.rar (1.3 KB)
  • 描述: MemoryUsageDemo:JFreeChart1.0.6的官方实时曲线类
  • 下载次数: 3145
分享到:
评论
25 楼 sutra 2008-08-02  
用BlockingQueue辅助实现。
24 楼 qiancaoduwu 2008-07-07  
谢谢楼主,东西很OK!
23 楼 小甜甜弟弟 2008-06-25  
不知道为什么 jfreechart不支持jboss服务器
22 楼 laiseeme 2008-05-14  
我也得研究研究applet了  类似统计图这样的把鼠标放上去显示当前数据的光是图片是没用的
21 楼 jan-zhou 2008-05-13  
magice 写道
robert02432004@126.com 写道
magice 写道
我这几天也正在研究JfreeChart,哈哈
但是我想问,LZ有没有试过通过什么办法把它嵌入到网页中?
不知道applet能不能做到
applet当然可以做到了,而且jfrre chart本来就是用于web开发的吧!
是可以直接用于web开发!
但是有点不好的就是web开发时只能输出静态图片,而图片是不能展示动态效果的(就像你给出的例子这种)
所以我就在想使用applet看行不行。

另外浏览器好像对applet的载入有安全限制,刚才我测试的时候,好像载入不到。。。



回楼主:jfreechart要实现实时的曲线图就只有这个方法了,实现代码简单,但是性能低,CPU占用高,每次更新会占用20%
applet装入jfreechart完全没有任何问题
解决方案一:直接完全用SWT开发,用JWS发布,就可避免applet
20 楼 jan-zhou 2007-12-24  
bcoffee 写道
applet可以显示动态web曲线,通过servlet传递数据就行了。但是,我的问题如下:
我想以秒为单位显示十分钟内的动态时间曲线图,但页面上只能从当前时间开始显示,慢慢向前走。而前十分钟的数据是一片空白。有什么方法可以先调用前十分钟的数据,然后让曲线接着向下走。



可以先查询出前十分钟的数据,添加到collection之后,再进行动态的数据添加。
19 楼 bcoffee 2007-11-12  
我知道了,我将时间轴数值范围设为固定的了,改成自动轴范围就可以
18 楼 bcoffee 2007-11-12  
applet可以显示动态web曲线,通过servlet传递数据就行了。但是,我的问题如下:
我想以秒为单位显示十分钟内的动态时间曲线图,但页面上只能从当前时间开始显示,慢慢向前走。而前十分钟的数据是一片空白。有什么方法可以先调用前十分钟的数据,然后让曲线接着向下走。
17 楼 sojune 2007-10-25  
我一般用的是ChartDirector
16 楼 tiyi 2007-10-13  
man 写道
当后台用ChartUtilities.writeChartAsJPEG(
response.getOutputStream(),
0.1f,
chart,
400,
300,
null
);
输出数据时,如果页面使用ajax,应怎校捕获呢?
或者说,我想用ajax技术显示生成的jfreechart 图片


Ajax是和语言平台关联不大。你只要确保JfreeChart输出图像(可利用Servlet)。
然后用Ajax定时的reload一张image的src即可(可在url后加时间标记来保障浏览器强制加载)。
15 楼 cary 2007-10-13  
可以用vml+ajax,毕竟刷图片数据量比较大。
14 楼 man 2007-10-13  
当后台用ChartUtilities.writeChartAsJPEG(
response.getOutputStream(),
0.1f,
chart,
400,
300,
null
);
输出数据时,如果页面使用ajax,应怎校捕获呢?
或者说,我想用ajax技术显示生成的jfreechart 图片
13 楼 fallingstone 2007-09-26  
网页上还是flex酷啊
12 楼 qiuyu92088 2007-09-25  
用applet可以实现在web页面上的实时曲线图,我已经试过,现在有个问题是怎么才能显示曲线的峰值啊,那位高手做过类似的例子啊
11 楼 tvjody 2007-09-18  
Flex3做这样的报表,很方便,而且给用户丰富的体验
10 楼 cayenne 2007-09-01  
我试过网页上用AJAX刷图片做成实时更新效果,但效率问题和实时效果还是要做权衡的。
9 楼 magice 2007-08-31  
robert02432004@126.com 写道
laiseeme 写道
jfreechart里面有个servlet类 你上网搜一下应该有很多例子
作为一个图片插入到网页中 但是要做到这种实时曲线那不行
没在网页中用过,不过ajax不就是用来干异步通信的吗?呵呵
ajax的异步和实时曲线那是两码事。
实时曲线实际上是一个应用程序,而ajax简单来说是局部刷新,注意还是要刷新页面的,如果实时曲线使用ajax做,那么每秒至少刷新25次,事实上这是达不到的。
8 楼 favey 2007-08-31  
laiseeme 写道
jfreechart里面有个servlet类 你上网搜一下应该有很多例子
作为一个图片插入到网页中 但是要做到这种实时曲线那不行
没在网页中用过,不过ajax不就是用来干异步通信的吗?呵呵
7 楼 laiseeme 2007-08-31  
jfreechart里面有个servlet类 你上网搜一下应该有很多例子
作为一个图片插入到网页中 但是要做到这种实时曲线那不行
6 楼 magice 2007-08-31  
robert02432004@126.com 写道
magice 写道
我这几天也正在研究JfreeChart,哈哈
但是我想问,LZ有没有试过通过什么办法把它嵌入到网页中?
不知道applet能不能做到
applet当然可以做到了,而且jfrre chart本来就是用于web开发的吧!
是可以直接用于web开发!
但是有点不好的就是web开发时只能输出静态图片,而图片是不能展示动态效果的(就像你给出的例子这种)
所以我就在想使用applet看行不行。

另外浏览器好像对applet的载入有安全限制,刚才我测试的时候,好像载入不到。。。

相关推荐

    java中关于JFreeChart实现实时曲线图

    本文将基于提供的代码片段,深入探讨如何使用JFreeChart实现实时更新的曲线图。 ### 实现原理 在Java中使用JFreeChart创建实时曲线图,主要涉及以下几个关键步骤: 1. **创建时间序列(Time Series)**:时间序列...

    JFreeChart画曲线图

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的2D图表,包括曲线图、柱状图、饼图、散点图等。在本示例中,我们将重点关注如何使用JFreeChart绘制曲线图,以及如何在数据点上显示具体的数据值。 ...

    JSP+JFreeChart 实现曲线图、柱形图

    在"JSP+JFreeChart 实现曲线图、柱形图"的项目中,开发者首先需要在JSP页面中引入JFreeChart的相关库。这通常通过在页面头部添加JAR依赖或者使用Maven或Gradle等构建工具来完成。然后,我们需要在Java后端代码中创建...

    applet_+_JfreeChart_实现曲线走势图

    综上所述,结合Applet和JFreeChart实现曲线走势图是一项涉及Web客户端编程、数据可视化和Java图形处理的综合任务。尽管Applet已逐渐被淘汰,但学习这个过程对于理解早期Web技术以及图形库的使用仍然有其价值。

    jfreechart 柱状图、曲线图、饼图经

    JFreeChart是一款强大的Java图形库,它为开发者提供了丰富的图表类型,包括柱状图、曲线图和饼图等,使得在Java应用中展示数据变得更加直观和美观。在本篇文章中,我们将深入探讨如何利用JFreeChart来创建这些图表,...

    JFreeChart简单实现光滑曲线绘制

    JFreeChart简单实现光滑曲线绘制 JFreeChart是一个流行的开源图表库,用于生成各种类型的图表,包括折线图、柱状图、饼图等。下面我们将介绍如何使用JFreeChart简单实现光滑曲线绘制。 光滑曲线绘制 光滑曲线绘制...

    使用 jfreechart 生成 曲线、柱状图、饼状图、分布图 展示到JSP

    JFreeChart是一个强大的Java库,它允许开发者创建各种类型的图表,包括曲线图、柱状图、饼状图和分布图等。在当前JS图表库盛行的时代,JFreeChart依然因其稳定性和丰富的定制性而在Java领域占有一席之地。本文将详细...

    利用jFreeChart做曲线图、饼状图、柱状图

    jFreeChart是java编程语言中一个功能强大、开源免费的图表库,能够生成各种类型的图表,包括曲线图、饼状图、柱状图等。通过jFreeChart,可以快速地生成高质量的图表,以满足不同领域的需求。 jFreeChart核心对象类...

    柱状图 圆饼图 曲线图 struts2.0 jfreechart

    JFreeChart则是一个强大的Java图表库,能够生成多种类型的图表,包括柱状图、圆饼图和曲线图,非常适合在数据可视化应用中使用。在Struts2.0中集成JFreeChart,可以为Web应用程序添加丰富的图形展示功能,让数据以...

    flex +jfreechart生成 饼状图+曲线图+柱状图(完整版)

    Flex是一种基于ActionScript的开源框架,主要用于构建富互联网应用程序(RIA),而JFreeChart则是一个Java库,专门用于生成高质量的图表,包括饼状图、柱状图和曲线图等。 在Flex中,我们通常使用MXML和...

    Java生成曲线图

    在这个场景下,JFreeChart 是一个强大的 Java 库,它为开发者提供了丰富的图表类型,包括曲线图,用于直观地展示数据趋势。下面我们将深入探讨 JFreeChart 的使用方法、特点以及如何在 Java 中生成曲线图。 首先,...

    jfreechart绘制的风速风向玫瑰图

    使用jfreechart绘制风速风向玫瑰图可以非常方便地实现各种风速风向分析。例如,我们可以使用不同的颜色来表示不同的风速和风向,可以使用雷达图像网格来表示风速的分布情况等。jfreechart提供了非常灵活的图表定制...

    jfreechart曲线图饼图柱状图 免费图标 图表

    JFreeChart是一款强大的Java图表库,它为开发者提供了丰富的图形绘制功能,包括曲线图、饼图和柱状图等。这个库是免费的,适用于各种项目,无论是商业应用还是个人学习,都能从中受益。在本篇文章中,我们将深入探讨...

    jfreechart 曲线图 3d饼图 3d柱状图

    **JFreeChart库详解:创建3D曲线图、3D饼图和3D柱状图** JFreeChart是一个强大的Java图形库,它提供了多种图表类型,包括曲线图、饼图和柱状图,且支持2D和3D效果。本篇文章将深入探讨如何使用JFreeChart来创建这些...

    JFreeChar实现曲线图:lib+Demo

    在本篇内容中,我们将深入探讨如何利用JFreeChart库来实现曲线图,并通过实例来展示其基本用法。 首先,我们需要了解JFreeChart的基本结构。JFreeChart的核心是`ChartFactory`类,它提供了创建各种图表的静态工厂...

    JfreeChart单条曲线实例

    在提供的代码片段中,演示了如何使用JfreeChart库创建一个动态更新的时间序列曲线图。该实例涉及的关键概念和代码分析如下: #### 创建图表 - **导入必要类**:首先,代码导入了JFreeChart相关的类,如`...

    JFreeChart双Y轴折线图实例,可以直接运行

    JFreeChart双Y轴折线图实例,可以直接运行,实例类为LineChartDemo1.JAVA,有注释。 若想在web工程使用只需如下。 String filename = ServletUtilities.saveChartAsPNG(jfreechart, 600, 400, null, session); ...

    JfreeChart画双Y轴折线图

    在Java编程领域,JFreeChart是一个非常流行的图表库,它允许开发者创建各种复杂的数据可视化图形,包括折线图、柱状图、饼图等。在本篇博客中,"JfreeChart画双Y轴折线图"的主题,将探讨如何使用JFreeChart库来创建...

Global site tag (gtag.js) - Google Analytics