日期:2014-05-16 浏览次数:20316 次
一、JFreeChart的介绍与获取 JFreeChart开发包是一个开源的Java图形开发包,它从柱形图,饼形图,到雷达图,蜡烛图等等无所不包,可以在c/s,b/s,甚至是实时环境都能一显身手。
当前的JFreeChart的最新版本为jfreechart-1.0.11.zip。可以到http://www.jfree.org/jfreechart/index.html找到
二、JFreeChart的基本使用
不论创建的是什么图,JFreeChart都遵循以下的这个使用步骤:
1、建立Dataset。所有的数据都存放在Dataset中的。(创建一个数据源(dataset)来包含将要在图形中显示的数据)
2、建立JFreeChart。将dataset中的数据导入到JFreeChart中。(创建一个 JFreeChart 对象来代表要显示的图形 )
3、设置JFreeChart的显示属性。这一步可以省略,使用默认的JFreeChart显示属性。
3、渲染图表。即生成图片。
4、页面图片显示。
重要的类和接口:
org.jfree.data.general.Dataset 所有数据源类都要实现的接口
org.jfree.chart.ChartFactory 由它来产生 JFreeChart 对象
org.jfree.chart.JFreeChart 所有对图形的调整都是通过它噢!!
org.jfree.chart.plot.Plot 通过JFreeChart 对象获得它,然后再通过它对图形外部部分(例:坐标轴)调整
注意:它有很多子类,一般都下涉及到它的子类!
org.jfree.chart.renderer.AbstractRenderer 通过JFreeChart 对象获得它,然后再通过它对图形内部部分(例:折线的类型)调整。同样,针对不同类型的报表图,它有着不同的子类实现!在下面我们简称它为 Renderer
三、JFreeChart使用的具体例子
在web应用中的例子
package fly.jfreechart.test; import java.awt.Color; import java.awt.Font; import java.io.PrintWriter; import java.text.NumberFormat; import java.text.SimpleDateFormat; import javax.servlet.http.HttpSession; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartRenderingInfo; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.entity.StandardEntityCollection; import org.jfree.chart.labels.StandardXYToolTipGenerator; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.chart.servlet.ServletUtilities; import org.jfree.chart.title.LegendTitle; import org.jfree.chart.title.TextTitle; import org.jfree.data.time.Day; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.data.xy.XYDataset; import org.jfree.ui.RectangleInsets; public class LineXYChart { /** * * */ public String getLineXYChart(HttpSession session,PrintWriter pw){ XYDataset dataset = this.createDateSet(); String fileName = null; //建立JfreeChart JFreeChart chart = ChartFactory.createTimeSeriesChart("JFreeChart时间曲线序列图",//title "Date", //X-axis label "Price",//y-axis label dataset,//data true,//create legend? true,//generate tooltips? false//generate UTLS? ); //设置JFreeChart的显示属性,对图形外部部分进行调整 chart.setBackgroundPaint(Color.white);//设置曲线背景色 //设置字体大小,形状 Font font = new Font("宋体",Font.BOLD,16); TextTitle title = new TextTitle("JFreeChart时间曲线序列图",font); chart.setTitle(title); //副标题 TextTitle subtitle = new TextTitle("副标题",new Font("黑体",Font.BOLD,12)); chart.addSubtitle(subtitle); chart.setTitle(title);//标题 //设置图示标题字符 LegendTitle legengTitle = chart.getLegend(); legengTitle.setItemFont(font); XYPlot plot = (XYPlot)chart.getPlot();//获取图形的画布 plot.setBackgroundPaint(Color.LIGHT_GRAY);//设置网格背景色 plot.setDomainGridlinePaint(Color.green);//设置网格竖线(Domain轴)颜色 plot.setRangeGridlinePaint(Color.white);//设置网格横线颜色 plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));//设置曲线图与xy轴的距离 plot.setDomainCrosshairVisible(true); plot.setRangeCrosshairVisible(true); XYItemRenderer r = plot.getRenderer(); if(r instanceof XYLineAndShapeRenderer){ XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r; renderer.setBaseShapesVisible(true); renderer.setBaseShapesFilled(true); renderer.setShapesVisible(true);// 设置曲线是否显示数据点 } //设置Y轴 NumberAxis numAxis = (NumberAxis) plot.getRangeAxis(); NumberFormat numFormater = NumberFormat.getNumberInstance(); numFormater.setMinimumFractionDigits(2); numAxis.setNumberFormatOverride(numFormater); //设置提示信息 StandardXYToolTipGenerator tipGenerator = new StandardXYToolTipGenerator( "历史信息{1}16:00,{2})",new SimpleDateFormat("MM-dd"),numFormater); r.setToolTipGener