作者:郦春锦 杭州电子科技大学
msn
:
lichunjin@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
可见
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作品:
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=60598