Jfreechart 学习笔记

Jfreechart 学习笔记

                                                       作者:郦春锦 杭州电子科技大学

                                                       msnlichunjin@hotmail.com

 

研究目的是:利用jfreechar开发出类似证券之星的股票实时走势图

具体地址http://quote.stockstar.com/stock/external_quote.asp?code=shzs000001

目前本人已经用applet实现类似的功能,由于applet的局限

所以要进一步的开发,在此基础上要采用图片的形式。

jfreechart 以下简称 chart

一.Chart的主要应用

是在绘图上,包括能够绘制盘块图(pie charts)、柱状图(bar charts)、折线图、曲线图、时间/值连续图,包括各种applet小程序窗体以及web上的jsp/servlet程序

 

二.Chart的设计

2.1 Chart在设计上采用静态工厂模式ChartFactory,目的产生各种的图表

2.2 产生JFreeChart对象的实例的方法:
   1.工厂模式产生一个所需要绘画图形的实例,例如
   JFreeChart chart = ChartFactory.createTimeSeriesChart(
            "Weekly Data",
            "Date",
            "Value",
            dataset,
            true,
            true,
            false
        );
   2.直接new一个chart的构造方法
   JFreeChart chart = new JFreeChart(null, JFreeChart.DEFAULT_TITLE_FONT, plot, true);

 

 

三.时间/值线连续图,应用于股票的走势图

3.1.如何放置时间/值的一系列的数据,

chart采用类XYSeriesCollection来放置(x,y)格式的数据,对应的对象是XYSeries

chart采用类TimeSeriesCollection来放置时间/值线的数据,对应的对象是TimeSeries

可见XYSeriesCollectionTimeSeriesCollection类似集合容器类

 

3.2. 股票图生成的原理(一条线)

第一步:产生XYSeries对象的实例,添加数据到XYSeries,并且产生一个参数为XYSeries对象的XYSeriesCollection

第二步:产生StandardXYToolTipGenerator对象的实例,设置X轴时间的显示格式

第三步:产生StandardXYItemRenderer对象的实例,设置绘画图形的方式,是点到点的绘画,

第四步:产生XYPlot对象的实例,数据格式设置成(x,y)的形式。

               XYPlot plot = new XYPlot(数据集合, 时间x, y, 绘画图形的方式);

最后一步:无论生成什么图形,都必须产生JFreeChart对象的实例,

                JFreeChart chart = new JFreeChart(标题, 字体,plot, 是否生成图例);

Servlet/jsp可选功能:

请求的时候生成图片,可以是jpg和png格式

// Write the chart image to the temporary directory

ChartRenderingInfo? info=new? ChartRenderingInfo(new StandardEntityCollection());

filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);

 

3.3.应用于股票的走势图的局限性

由于股票数据是实时的,因此它表现出来的线是随着时间的推移而前进

但是chart目前只是根据读入的数据的多少而动态绘制图线,时间线不能固定的设置绘画

这是一个待解决的问题,这也是本次学习研究目的,加以改进!

3.4.期望的解决办法

更改底层chart的源代码或者新增功能类

 

四,深入chart

4.1 时间轴的显示:

由于图中必须画一条昨日收盘线作为参考线。于是就把参考线一直画到底,如此以来

就能完整的表示一天的时间,就能解决3.3的问题

 

4.2 数据筛选和显示

由于股票交易时间是9:30-11:30??和13:00-15:00。所以一方面要把时间轴中的停盘时间去掉

另一方面,曲线必须连续而且不能存在数据的重叠,我刚开始试着把时间过滤掉,但chart是根据你的数据的时间点的数量进行调整的,所以显示出来的时间轴并没有很好的体现停盘时间的存在

(具体体现停盘时间:时间轴9:30、15:00必须显示,11:30和13:00同一个点,只要显示其中一个值)

我又重新研究了chart的demo,发现SegmentedHighLowChartDemo.java演示了如何排除休息日的时间

相关的chartAPI的doc:SegmentedTimeline可以设定要排除的时间间隔!

所以问题得到解决

 

五,总结

经过一个礼拜的学习和研究,jfreechart在生成各种数据分析图片方面确实不错,

如果你的项目要用到此类应用,可以学习一下!也可以联系我一起谈论,

 

粗糙chart作品:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值