作者:郦春锦 杭州电子科技大学
		
				
						                                                       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