JfreeChart简介
JFreeChart 是JFreeChart公司在开源网站SourceForge.net上的一个项目,该公司的主要产品有如下:
1.JFreeReport :报表解决工具
2.JFreeChart:Java 图形解决方案(Application/Applet/Servlet/Jsp)
3.JCommon :JFreeReport和JFreeChart的公共类库
4.JFreeDesigner :JFreeReport的报表设计工具
JFreeChart 的功能非常强大,可以实现饼图 ( 二维和三维 ) , 柱状图 ( 水平 , 垂直 ), 线图 , 点图 , 时序图 , 甘特图 , 股票行情图 , 混和图 , 温度计图 , 刻度图等常用商用图表, 支持常见图形的 3D 显示。
图形可以导出成 PNG 和 JPEG 格式,同时还可以与 PDF 和 EXCEL 关联,支持对图形的放大、缩小。
JFreeChart获取
我们可以从jfree官方网站上获取最新版本和相关资料(但是jfreechart的开发文档和demo源码是收费的)
官方网址:http://www.jfree.org/jfreechart
jfreechart-1.0.11.zip下载:http://nchc.dl.sourceforge.net/sourceforge/jfreechart/jfreechart-1.0.11.zip
jfreechart-1.0.10-javadocs下载:
http://nchc.dl.sourceforge.net/sourceforge/jfreechart/jfreechart-1.0.10-javadocs.zip
JFreeChart配置安装
解压jfreechart-1.0.11.zip
/lib : jar文件
/source : 源代码
/tests : junit测试程序
设置classpath。加入lib文件夹里的两个jar包(jfreechart-1.0.1.jar 、jcommon-1.0.0.jar)
注意:
jfreechart的类结构设计前后兼容性不是很好,不同版本的jfreechart中类库结构可能不一样,有时候可能需要查源码。
如果是中文显示的时候可能依据观感需要改变源码的字体。
JFreeChart 核心类库介绍
jfreechart源码主要由两个大的包组成:org.jfree.chart,org.jfree.data。
其中前者主要与图形本身有关,后者与图形显示的数据有关。
JFreeChart | 图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。 |
ChartFactory | 工厂类提供了不同的方法用于创建不同类型的图表对象。 |
XXXDataset | 数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类。 |
XXXPlot | 图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持。 |
XXXAxis | 用于处理图表的两个轴:纵轴和横轴。 |
XXXRenderer | 负责如何显示一个图表对象。 |
XXXURLGenerator | 用于生成Web图表中每个项目的鼠标点击链接。 |
XXXXXToolTipGenerator | 用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类。 |
JFreeChart对象
1.定义:JFreeChart 可以生成很多图形对象,它的工厂类提供了 33 个工厂方法用于生成不同的图形对象。
2.组成:图形对象( JFreeChart ),由 Title( 主标题 ) , SubTitle (子标题 ) , Plot (图形的绘制结构)等几个主要对象组成。各个组成部分如下图所示:
这是一个 JFreeChart 对象,上面的“ 台湾偶像剧收视率(2008-9-21)”是 Title 对象,中间区域是 Plot 对象(包括绘图区域和坐标轴区域),下面的区域是 LegendTitle 对象,是一种 SubTitle 对象。 每个 JFreeChart 对象只能有 1 个 Title 对象, 1 个 Plot 对象,可以有多个 SubTitle 对象。
3.设置:背景(背景颜色、背景图片、透明度等)、边框(是否可见、笔画、 Paint 等)、渲染方式、标题对象、子标题对象的增删查操作。
主标题对象
1.定义:主标题对象是 TextTitle 类型。
2.设置:背景、字体(字体类型、颜色、内容、对齐方式等操作)、 tooltip 、 URL。
Plot 对象
1.定义:Plot 对象是图形的绘制结构对象。
2.组成:JFreeChart 中有 18 种 Plot 抽象类的具体实现类,每一种图形对象中的 Plot 对象都在实例化的时候创建。
Plot 的具体实现类主要由以下重要对象组成:
Renderer 对象(图形的绘制单元——绘图域)
Datset (图形的数据源),
DomainAxis (区域轴,相当于 x 轴),
RangeAxis (范围轴,相当于 y 轴)。
不同的 Plot 对象组成方式不尽相同。
有的不含有 Renderer 对象,比如 CompassPlot 、 ContourPlot 、MultiplePiePlot 、 PiePlot 等,
有的不含有 DomainAxis 、 RangeAxis 对象,
另外除了 FastScatterPlot 类都含有 Datset 对象, FastScatterPlot 使用 float 的二维数组充当数据源。
尤其说明一点,饼状图相关的 Plot 对象( MultiplePiePlot 、 PiePlot 、 PiePlot3D 、 RingPlot )中都不含有 Renderer 对象、 DomainAxis 对象、 RangeAxis 对象。
一般来说, Datset 对象存储数据模型, Renderer 对象存储显示模型, Plot 对象根据 Datset 对象、 Renderer 对象完成画图操作。
仍以上面的图形讲解 Plot 对象的组成。
上图的中间区域是是一个 XYPlot 对象。其中的折线部分即是图形的绘制单元 Renderer 对象。 X 轴是 DomainAxis , y 轴是 RangeAxis ,其中 Datset 对象属于数据模型范畴,是 UI 不可见对象。该图中的 plot 背景色、网格线的各种设置可以通过 XYPlot 对象本身完成。
3设置:
所有的 Plot 共有的:背景(背景颜色、背景图片、透明度等)、前景透明度、无数据存在情况的设置(显示的字符内容、显示的字体、显示的 Paint )、放大缩小比例的,
大部分 Plot 对象还有设置 Dataset 、设置 Renderer 对象操作。
Renderer对象
1.定义:Renderer 对象是图形的绘制单元。 JFreeChart 提供了两个接口 CategoryItemRenderer 和 XYItemRenderer 、 1 个抽象类 AbstractRenderer 供具体的 Renderer 类实现,给出了将近 50 种具体实现类。
2组成:不同的 Renderer 的实现类实现了不同的显示方式,在含有 Renderer 对象的 JFreeChart 对象中, R enderer 对象决定了JFreeChart对象的显示方式。
例如:柱状图的Plot对象中默认的Renderer对象是 CategoryItemRenderer 对象,通过线图的 Plot 对象中的Renderer对象 为 LineAndShapeRenderer 。
使用中一般不需要显式的实例化一个 R enderer 对象,一般通过 JFreeChart 对象的 Plot 对象调用现有的 R enderer 对象进行重新设置等操作。
3.设置:一般来说 Renderer 对象可进行的操作有:
对 item label (下图中的柱状图上的红色数字即为 item label 的示例)的默认设置( item label 的产生方式、是否可见、字体、 Paint 、正反向 item label 的位置设置等)、绘制图形的边框默认设置( Paint 、笔画、是否可见等)、绘制图形的默认设置(形状、笔画、是否可见、对应的图例中是否可见等,折线图还有线条是否可见、折点图形是否可见、折点图形是否填充、折点图形的形状、对应的图例中线条是否可见、图形是否可见、整体是否可见等)、以及对指定 item label 的设置、指定绘制图形的设置。可以说和具体绘制的图形相关的属性都可以通过 Renderer 对象设置。
Axis对象
1.组成:JFreeChart 提供了两种类型的坐标轴: CategoryAxis (等级轴)和 ValueAxis (值轴),
ValueAxis 又有 3 个子类: DateAxis (时间轴)、 NumberAxis (数字轴)、 PeriodAxis (时期轴)。
这些坐标轴还有更详细的子类,不再一一列举。
2.设置:标题的设置(内容、字体、Paint、显示角度等)、坐标线的设置(笔画、Paint、是否可见等)、刻度线的设置(是否可见、笔画、Paint、位于绘图区域的长度、位于绘图区域外的长度等)、刻度标示的设置(笔画、Paint、字体、与轴的距离等)、坐标轴范围设置等。
CategoryAxis 对象还可以进行的操作有: 刻度标示间距 设置( 最小间距、最大间距、指定间距)等。
ValueAxis 对象可进行的操作有:轴端设置(显示的图形形状)、范围设置(是否自动产生范围、自动产生的最小范围、最大范围、指定确定范围、指定范围大小等)、间隔设置(是否自动产生间隔、指定间隔)等。
DateAxis 对象还有对时间刻度显示格式的设置操作。
子标题对象
子标题对象是 Title 类型的对象,一个JFreeChart可以有多个子标题对象。JFreeChart提供了5种Title的实现,可以是图片、文本、图例等的形式。
数据源处理
JFreeChart 中的数据源是DataSet接口类型。该接口有三个主要的子类接口:CategoryDataset、PieDataset、SeriesDataset
CategoryDataset 接口的实现类基本上都维护了一个三元组<value,row,col>的列表结构。不同的实现类中value 的类型不相同。<row,col>唯一确定一个三元组。CategoryDataset的实现类提供对这个三元组的增删改查操作。
PieDataset 接口有两个主要的实现类:CategoryToPieDataset 、DefaultPieDataset。PieDataset接口的实现类基本上都维护了一个二元组<key,value>的列表结构。Key唯一确定一个二元组。CategoryDataset的实现类提供对这个二元组的增删改查操作。CategoryToPieDataset中的二元结构列表通过对CategoryDataset类型的对象指定行或者列转化过来。DefaultPieDataset直接维护一个二元结构列表。
SeriesDataset 接口的实现类基本上都维护了一种特定数据结构的列表。以TimeSeriesCollection为例。它维护一个TimeSeries对象列表,提供对该列表的增删查操作。每个TimeSeries对象维护一个<time,value>列表,提供对该列表的增删改查操作。