Jfreechart 学习笔记
作者:郦春锦 杭州电子科技大学
研究目的是:利用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
可见XYSeriesCollection、TimeSeriesCollection类似集合容器类
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作品: