• 1. JFreeChart动态图表
  • 2. 1页简介 JFreeChart是Java中开源的制图组件,主要用于生成各种动态图表。在Java的图形报表技术中,JFreeChart组件提供了方便、快捷、灵活的制图方法。 作为一个功能强大的图形报表组件,JFreeChart为Java的图形报表技术提供了解决方案。在Java项目的应用中,JFreeChart组件几乎可以满足目前图形报表的所有需求。 JFreeChart组件可以生成各种各样的图形报表,如常用的柱形图、区域图、饼形图、折线图、时序图、甘特图等;而对于同一种类型的图表,JFreeChart组件还提供了不同的表现方式。
  • 3. 2页JFreeChart的下载与使用 JFreeChart是开放源代码的图形报表组件(开源站点SourceForge.net上的一个Jave项目),其主页为http://www.jfree.org/jfreechart/index.html。 在主页中单击DOWNLOAD导航链接将进入下载页面,选择所要下载的JfreeChart版本即可进行下载,目前最新版本为1.0.13。 在下载成功后将得到一个名为jfreechart-1.0.13.zip的压缩包,此压缩包包含JFreeChart组件源码、示例、支持类库等文件,将其解压缩后的文件结构如右图所示。
  • 4. 3页其中jfreechart-1.0.13-demo.jar 文件为JFreeChart组件提供的演示文件,运行此文件将可以看到利用JFreeChart组件制作的各种图表的样式及效果;source文件夹为JFreeChart的源代码文件夹,在此文件夹中可以查看到JFreeChart组件的源代码;lib文件夹为JFreeChart的支持类库。
  • 5. 3页常见统计图介绍柱状图:也称条图、长条图、条状图,是一种以长方形的长度为变量的表达图形的统计报告图,由一系列高度不等的纵向条纹表示数据分布的情况,用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。柱状图图亦可横向排列,或用多维方式表达。
  • 6. 4页饼形图:一个划分为几个扇区的圆形图表,用于描述量、频率或百分比之间的相对关系。在饼图中,每个扇区的弧长(以及(圆心角)和面积)大小为其所表示的数量的比例。这些扇区合在一起刚好是一个完全的圆形。顾名思义,这些扇区拼成了一个切开的饼形图案。
  • 7. 折线图:是用一个单位长度表示一定的数量,根据数量的多少描出各点,然后把各点用线段顺次连接起来,以折线的上升或下降来表示统计数量增减变化。折线统计图不但可以表示出数量的多少,而且还能够清楚的表示出数量增减变化的情况。
  • 8. JFreeChart开发前准备开发前的准备,JfreeChart开发环境的搭建分为两步:导入JFreeChart组件包;配置JFreeChart。 1、导入JFreeChart包:导入在lib目录下的jfreechart-1.0.13.jar、jcommon-1.0.16.jar两个Jar包到工程。 2、配置JFreeChart: JFreeChart组件能够成.JPEG、.PNG格式的图片,其输出方式可以直接存储在硬盘中,也可以交给JFreeChart组件进行管理。在Web应用中,所生成的图形报表一般均为动态图表,如果对每次生成的图表都进行直接存储,将
  • 9. 7页会产生大量的垃圾文件,时间长了必须进行清理。因此,由JFreeChart组件进行管理来生成图片是一个不错的选择,它不仅可以提供图片的路径,而且在查看图片后JFreeChart组件会自动进行清理。 JFreeChart组件提供了一个Servlet文件用于获取生成的图片,此Servlet文件存在于JFreeChart组件包中,所以在使用过程中,需要将其配置到Web.xml文件中。其配置方法如下:
  • 10. 8页JFreeChart开发流程JFreeChart分为三个步骤: 创建数据集:创建用来构成JFreeChart图表的数据,JFreeChart图表显示的数据都来源于数据集。 创建JFreeChart对象:JFreeChart类是一个制图对象,它代表着一种制图类型,在制图过程中,只有在创建制图对象JFreeChart后,才可以生成实际的图片。 获取图片:获取图片,在web页面显示。
  • 11. 9页创建数据集在JFreeChart组件的图形报表技术应用中,绘制一个图表需要一定的数据,JFreeChart组件通过提供的数据进行计算并绘制出图表信息。由于在数据的分析计算中并不是单一的数值,绘制图表时就要为JFreeChart组件提供数据集合。 数据集合对象是用于装载绘制图表所需要的数据集。在JFreeChart组件中,针对不同图表类型提供了不同的数据集合对象,它们所具有的作用也是不同的。 常用的数据集对象: DefaultCategoryDataset类:默认的类别数据集合对象,可用于创建柱形图、折线图、区域图数据集合等。 DefaultPieDataset类:默认的饼形图数据集合对象,可用于创建饼形图数据集合。
  • 12. 10页 如下图所示方法,则创建了一个可用于绘制图表的数据集对象。该数据集可以用来用来创建简单的一维柱状图。不同的图形采用的数据集对象不同,同一数据集对象设置的数据不同,产生图形数据也不同。所以数据集生产图形内容、形状的关键。
  • 13. 11页创建JFreeChart对象在生成图形报表时,制图对象JFreeChart是必不可少的对象,它可以直接通过new关键字进行实例化,也可以通过制图工厂ChartFactory类进行实例化。当使用new关键字进行实例化时,需要设置大量的属性信息,因为JFreeChart组件提供的图表种类很多,对于每一种图表都要进行特殊的设置,非常繁琐。因此在使用过程中,一般都使用制图工厂ChartFactory类进行创建。 制图工厂ChartFactory是一个抽象类,它不能被实例化,但提供了创建各种制图对象的方法,如创建柱形图对象、区域图对象、饼形图对象、折线图对象等方法,这些方法都是静态的方法,可直接创建JFreeChart对象,并且是属于某一种具体的图表类型的JFreeChart对象,使用非常方便。
  • 14. 12页ChartFactory常用方法及说明如下:图 表 类 型方 法说 明柱形图public static JFreeChart createBarChart()创建一个常规的柱形图对象public static JFreeChart createBarChart3D()创建一个3D效果的柱形图对象饼形图public static JFreeChart createPieChart()创建一个常规的饼形图对象public static JFreeChart createPieChart3D()创建一个3D效果的饼形图对象折线图public static JFreeChart createLineChart()创建一个常规的折线图对象public static JFreeChart reateLineChart3D()创建一个3D效果的折线图对象
  • 15. 13页如下图所示方法,通过制图工厂对象,创建了一个JFreeChart对象,其中createDataSet()方法返回数据集对象作为JFreeChart对象的数据来源。
  • 16. 14页获取图片获取图片有两种方式,第一种方式会在tomcat temp目录生产图片文件,第二种方式采用输出流的方式获取图片,不会产生垃圾文件。 (1)在输出图片之前,首先要生成JFreeChart组件所绘制的图片。此操作通过调用ServletUtilities类的saveChartAsJPEG()方法来实现,它返回一个.JPEG格式的图片名称。
  • 17. 15页通过此方法生成图片后,调用已注册的JFreeChart提供的Servlet类DisplayChart,即可获取图片的相对路径。 输出图片在Jsp中的应用关键代码如下,可参照该代码将其运用到servlet或Struts2的Action中。
  • 18. 16页(2)如下所示为采用输出流方式输出图片在struts2中的应用。调用ChartUtilities的writeChartAsJPEG 方法则可直接将图片输出到页面,而不用存储在硬盘中。
  • 19. 17页ChartUtilities的writeChartAsJPEG 方法介绍: 如果想在Jsp页面调用该图片,把图片的src请求路径设置为产生输出流的Action即可,例如:
  • 20. 18页两种图片获取方式分析通过对比,我们可发现,第一种图片获取方式是在Action中生成图片到硬盘,在Action返回时通过给页面传递该图片的路径来访问图片。这样,在同一个显示页面,无论你有多少个图片要显示,都可以通过一个Action去生成多个图片,传递其路径来实现,图片路径只是Action传递的众多参数中的普通一员。而且该Action能配置返回值,所以该Action实际上就是我们的业务Action,用来实现跳转。通过给该Action传递参数,处理数据,生成图片,跳转到页面,流程清晰,也符合我们一贯的程序设计思维。 我们再来看第二种图片获取方式。该方式没有实际生成图片,而是通过在Action中将图片的数据流直接写到页面上。首
  • 21. 19页先该Action不能拥有返回值,无法实现页面跳转,不能作为我们的业务Action。所以处理业务单元,我们还得有另外的业务Action。这样就会出现两个问题: 一是参数的传递,比如在页面我们有参数传递给业务Action,处理完业务,传递一些参数跳转到页面,但这时并没有涉及到图片的生成,图片的生成是在通过页面中的img标签的src去请求额外的生成图片的Action,通过数据流方式将图片写到页面。这样就还会涉及到用来处理图片逻辑的参数的二次传递,显然这种设计是比较鸡肋的。 二是当一个业务单元中需要多个图片,就得为每张图片设计一个输出图片数据流的Action,显然不可取。
  • 22. 20页综合分析:图片输出,我们采用第一种方式。但第一种方式时间久了,会产生大量的垃圾图片文件。JFreeChart也考虑到了这一问题,为我们设计了一个监听器用来删除垃圾图片。该监听器的原理是:当session失效时,则删除由该session产生的图片文件。监听器在web.xml中配置如下: Session失效并不是浏览器关闭时,默认时间是30分钟,可以自己设置。
  • 23. 21页至此,经过以上三步,一个简单统计图就展现在页面上了。 通常情况下,为了使所生成的图片更加美观、大方,需要对所生成的图片进行一定的设置。可以通过以下几个对象对生成的图片进行设置。 制图工厂对象ChartFactory:该对象提供了一个对图片主题进行设置的方法。其中standardChartTheme为StandardChartTheme对象。 制图对象JFreeChart:通过该对象提供的方法可以对图片标题字体、背景图片、背景颜色、边框等进行设置。JFreeChart类常用方法及说明如下表:
  • 24. 22页坐标轴对象。 绘图区对象。 图片渲染对象。 方 法说 明public void setAntiAlias(boolean flag)设置字体模糊边界public void setBackgroundImage(Image image)设置背景图片public void setBackgroundImageAlignment(int alignment)设置背景图片对齐方式, 其参数常量定义在 org.jfree.ui.Align类中public void setBackgroundImageAlpha(float alpha)设置背景图片透明度public void setBackgroundPaint(Paint paint)设置背景颜色public void setBorderPaint(Paint paint)设置边界线条颜色public void setBorderVisible(boolean visible)设置边界线条是否可见
  • 25. 23页坐标轴对象在JFreeChart组件中涉及到坐标轴类型的图表时,其样式与属性由坐标轴对象Axis类进行控制。此类是坐标轴对象的父类,其常用方法及说明如下表所示: 方 法说 明public void setVisible(boolean flag)设置坐标轴是否可见public void setAxisLinePaint(Paint paint)设置坐标轴线条颜色, 此设置在3D效果下无效public void setAxisLineVisible(boolean visible)设置坐标轴线条是否可见public void setLabel(String label)设置坐标轴标题public void setLabelFont(Font font)设置坐标轴标题字体public void setLabelPaint(Paint paint)设置坐标轴标题颜色public void setLabelAngle(double angle)设置坐标轴标题旋转角度
  • 26. 24页JFreeChart组件针对不同类型的图表对象,提供了不同类型的坐标轴对象,由Axis类的子类进行扩展,其常用子类主要有:CategoryAxis类、ValueAxis类、NumberAxis类、DateAxis类。 (1)CategoryAxis类 CategoryAxis类是Axis类的子类,主要用于对分类轴的相关属性进行设置,其常用方法及说明如下表所示。 方 法说 明public void setCategoryMargin(double margin)设置分类轴边距public void setLowerMargin(double margin)设置分类轴下边距或左边距public void setUpperMargin(double margin)设置分类轴上边距或右边距public void setVertical CategoryLabels(boolean flag)设置分类轴标题是否旋转到垂直public void setMaxCategory LabelWidthRatio(float ratio)设置分类轴分类标签的最大宽度
  • 27. 25页(2)ValueAxis类 ValueAxis类是Axis类的子类,也是NumberAxis类与DateAxis类的父类,主要用于对数据轴的相关属性进行设置,其常用方法及说明如下表所示。 方 法说 明public void setAutoRange(boolean auto)设置数据轴数据范围是否为自动public void setFixedAutoRange(double length)设置数据轴固定数据范围public void setInverted(boolean flag)设置数据轴是否反向public void setLowerMargin(double margin)设置分类轴下边距或左边距public void setUpperMargin(double margin)设置分类轴上边距或右边距public void setLowerBound(double min)设置数据轴上显示的最小值public void setUpperBound(double max)设置数据轴上显示的最大值
  • 28. 26页(3)NumberAxis类 NumberAxis类是ValueAxis类的子类,主要用于对数值类型数据轴的相关属性进行设置,其常用方法及说明如下表所示。 方 法说 明public void setAuto RangeIncludesZero(boolean flag)设置是否强制在自动 选择的数据范围中包含0public void setAuto RangeStickyZero(boolean flag)设置是否强制在整个数据 轴中包含0,即使0不在数据范围中public void setNumberFormat Override(NumberFormat formatter)设置数据轴数据标签的显示格式
  • 29. (4)DateAxis类 DateAxis类是ValueAxis类的子类,主要用于对日期轴的相关属性进行设置,其常用方法及说明如下表所示。 方 法说 明public void setMaximumDate (Date maximumDate)设置日期轴上的最小日期Public void setMinimumDate (Date minimumDate)设置日期轴上的最大日期public void setDateFormat Override(DateFormat formatter)设置日期轴日期标签的显示格式public void setTickUnit(DateTickUnit unit)设置日期轴的日期标签
  • 30. 28页绘图区对象通过数据集合生成的数据图表,可以通过绘图区对象进行属性设置,例如背景色、透明度等。绘图区对象是JFreeChart组件中的一个重要对象,由Plot类定义,可以通过此类设置绘图区属性及样式,其常用方法及说明如下表所示。 方 法说 明public void setBackgroundImage (Image image)设置数据区的背景图片public void setBackgroundImage Alignment(int alignment)设置数据区的背景图片对齐方式 (参数常量在org.jfree.ui. Align类中定义)public void setBackgroundAlpha(float alpha)设置数据区的背景透明度, 范围在0.0~1.0间public void setForegroundAlpha(float alpha)设置数据区的前景透明度, 范围在0.0~1.0间public void setDataAreaRatio(double ratio)设置数据区占整个图表区的百分比public void setOutLinePaint(Paint paint)设置数据区的边界线条颜色public void setNoDataMessage(String message)设置没有数据时显示的消息
  • 31. 29页JFreeChart所能生成的图形报表是多种多样的,仅仅一个Plot类并不能满足绘图区样式的设置,在对不同类型图形的设置中,可以通过Plot的子类进行实现,其常用子类主要有:PiePlot类、CategoryPlot类、XYPlot类。 (1)PiePlot类 PiePlot类是Plot类的子类,主要用于描述PieDataset数据集合类型的图表,通常使用此类来绘制一个饼形图,其常用方法及说明如下表所示。
  • 32. 30页方 法说 明public void setDataset(PieDataset dataset)设置绘制图表所需要的数据集合public void setCircular(boolean flag)设置饼形图是否一定是正圆public void setStartAngle(double angle)设置饼形图的初始角度public void setDirection(Rotation direction)设置饼形图的旋转方向public void setExplodePercent (int section,double percent)在显示饼形图时, 设置突出显示部分的距离public void setLabelFont(Font font)设置分类标签字体 (3D效果下无效)public void setLabelPaint(Paint paint)设置分类标签字体颜色 (3D效果下无效)
  • 33. 31页(2)CategoryPlot类 CategoryPlot是Plot类的子类,类主要用于描述CategoryDataset数据集合类型的图表,它支持折线图、区域图等,其常用方法及说明如下表所示。 方 法说 明public void setDatase t(PieDataset dataset)设置绘制图表所需要的数据集合public void setColumn RenderingOrder(SortOrder order)设置数据分类的排序方式public void setAxisOffset (Spacer offset)设置坐标轴到数据区的间距public void setOrientation (PlotOrientation orientation)设置数据区的方向(横向或纵向)public void setDomainAxis (CategoryAxis axis)设置数据区的分类轴public void setRangeAxis (ValueAxis axis)设置数据区的数据轴public void addAnnotation (CategoryAnnotation annotation)设置数据区的注释
  • 34. 32页(3)XYPlot类 XYPlot类是Plot类的子类,主要用于描述XYDataset数据集合类型的图表。此类可以具有0或多个数据集合,并且每一个数据集合可以与一个渲染对象相关联,其常用方法及说明如下表所示。 方 法说 明public ValueAxis getDomainAxis()返回X轴public ValueAxis getRangeAxis()返回Y轴public void setDomainAxis(ValueAxis axis)设置X轴public void setRangeAxis(ValueAxis axis)设置Y轴
  • 35. 33页图片渲染对象图片渲染对象用于渲染和显示图表,它在图表的显示效果方面起着很大的作用。在JFreeChart组件中,渲染对象定义为AbstractRenderer类,此类是所有渲染对象的父类,但它是一个抽象类,其常用方法及说明如下表所示。 在图片渲染对象中,JFreeChart组件同样对AbstractRenderer类进行了扩展,在使用过程中可根据实际需要,选择合适的AbstractRenderer类的子类对象。 方 法说 明public void setItemLabelAnchorOffset(double offset)设置数据标签与数据点的偏移public void setItemLabelsVisible(boolean visible)设置数据标签是否可见public void setItemLabelFont(Font font)设置数据标签的字体public void setItemLabelPaint(Paint paint)数据标签的字体颜色public void setOutLinePaint(Paint paint)设置图形边框的线条颜色public void setPaint(Paint paint)所有分类图形的颜色public void setSeriesItemLabels Visible(int series,boolean visible)设置分类的数据标签是否可见public void setSeriesItemLabelFont (int series,Font font)设置分类的数据标签的字体public void setSeriesItemLabelPaint (int series,Paint paint)设置分类的数据标签的字体颜色
  • 36. 34页JFreeChart在Struts2中的应用JFreeChart无论是应用在JSP、Servlet,还是Struts2 的Action,其开发流程的前两步都是一样的:创建数据集、创建JFreeChart对象。乃至其获取图片的方式都一样。获取图片得到一个图片的请求路径,只是这个路径是用Actiong传递给JSP,还是用Servlet传递给JSP,还是JSP直接写Java代码来获取这个路径的区别。所以说本质上一样的。能看懂JSP获取图片路径的方式就自然能将其改写成Action,如下图附上Actiong中应用实例。 graphURL为图片请求路径,将其传递给JSP页面即可。
  • 37. 35页
  • 38. 36页JFreeChart DEMO工程介绍工程名:jfreeChatpro。 访问项目主页:http://localhost:8080/。即可访问所有示例图表。 右图所示为工程目录结构。