posts - 32,  comments - 3,  trackbacks - 0

 

1简介

JFreeChartSourceForge.net上的一个开源项目,它的源码和API都可以免费获得。JFreeChart的功能非常强大,可以实现饼图(二维和三维),柱状图(水平,垂直),线图,点图,时序图,甘特图,股票行情图,混和图,温度计图,刻度图等常用商用图表,图形可以导出成PNGJPEG格式,同时还可以与PDFEXCEL关联,支持对图形的放大、缩小,支持常见图形的3D显示。

2图形对象的处理

2.1 JFreeChart对象

JFreeChart可以生成很多图形对象,它的工厂类提供了33个工厂方法用于生成不同的图形对象(具体的工厂方法可以参见JFreeChartAPI手册或者源码中的ChartFactory)。JFreechart对图形对象的抽象具体化。图形对象(JFreeChart),由Title(主标题)SubTitle(子标题)Plot(图形的绘制结构)等几个主要对象组成。各个组成部分如下图所示:
   
    
这是一个JFreeChart对象,上面的“chart标题”是Title对象,中间区域是Plot对象(包括绘图区域和坐标轴区域),下面的区域是LegendTitle对象,LegendTitle是一种SubTitle对象。

每个JFreeChart对象只能有1Title对象,1Plot对象,可以有多个SubTitle对象。JFreeChart对象可以进行的操作有:背景的设置(背景颜色、背景图片、透明度等)、边框的设置(是否可见、笔画、Paint等)、渲染方式的设置、标题对象的设置、子标题对象的增删查操作。(本文中的所有操作都不提供代码级的介绍,可参见API手册或者源码)

2.2 主标题对象

主标题对象是TextTitle类型,可以进行的操作有:背景设置、字体设置(字体类型、颜色、内容、对齐方式等操作)、tooltip设置、URL设置。

2.3 Plot对象

Plot对象是图形的绘制结构对象。JFreeChart中含有很多不同的Plot对象,每一种图形对象中的Plot对象都在实例化的时候创建。所有的Plot共有的操作有:背景设置(背景颜色、背景图片、透明度等)、前景透明度设置、无数据存在情况的设置(显示的字符内容、显示的字体、显示的Paint)、放大缩小比例的设置,大部分Plot对象还有设置Datset、设置Renderer对象操作。

JFreeChart中有18Plot抽象类的具体实现类。Plot的具体实现类主要由以下重要对象组成:Renderer对象(图形的绘制单元——绘图域),Datset(图形的数据源),DomainAxis(区域轴,相当于x轴),RangeAxis(范围轴,相当于y轴)。

不同的Plot对象组成方式不尽相同,有的不含有Renderer对象,比如CompassPlotContourPlotMultiplePiePlotPiePlot等,有的不含有DomainAxisRangeAxis对象,另外除了FastScatterPlot类都含有Datset对象,FastScatterPlot使用float的二维数组充当数据源。尤其说明一点,饼状图相关的Plot对象(MultiplePiePlotPiePlotPiePlot3DRingPlot)中都不含有Renderer对象、DomainAxis对象、RangeAxis对象。

一般来说,Datset对象存储数据模型,Renderer对象存储显示模型,Plot对象根据Datset对象、Renderer对象完成画图操作。


    仍以上面的图形讲解
Plot对象的组成。
上图的中间区域是是一个XYPlot对象。其中的折线部分即是图形的绘制单元Renderer对象。X轴是DomainAxisy轴是RangeAxis,其中Datset对象属于数据模型范畴,是UI不可见对象。该图中的plot背景色、网格线的各种设置可以通过XYPlot对象本身完成。

    下面讲解Renderer对象、Axis对象(X轴、y轴都属于Axis对象),Datset对象在后续章节中专门讲解。

2.3.1 Renderer对象

Renderer对象是图形的绘制单元。JFreeChart提供了两个接口CategoryItemRendererXYItemRenderer、以及1个抽象类AbstractRenderer供具体的Renderer类实现,给出了将近50种具体实现类。

一般来说Renderer对象可进行的操作有:对itemlabel(下图中的柱状图上的红色数字即为itemlabel的示例)的默认设置(itemlabel的产生方式、是否可见、字体、Paint、正反向itemlabel的位置设置等)、绘制图形的边框默认设置(Paint、笔画、是否可见等)、绘制图形的默认设置(形状、笔画、是否可见、对应的图例中是否可见等,折线图还有线条是否可见、折点图形是否可见、折点图形是否填充、折点图形的形状、对应的图例中线条是否可见、图形是否可见、整体是否可见等)、以及对指定itemlabel的设置、指定绘制图形的设置。可以说和具体绘制的图形相关的属性都可以通过Renderer对象设置。

不同的Renderer的实现类实现了不同的显示方式,在含有Renderer对象的JFreeChart对象中,Renderer对象决定了JFreeChart对象的显示方式。例如:柱状图的Plot对象中默认的Renderer对象是CategoryItemRenderer对象,通过设置Plot对象的Renderer对象LineAndShapeRenderer,则柱状图变为线图。使用中一般不需要显式的实例化一个Renderer对象,一般通过JFreeChart对象的Plot对象调用现有的Renderer对象进行重新设置等操作。

2.3.2 Axis对象

JFreeChart提供了两种类型的坐标轴:CategoryAxis(等级轴)和ValueAxis(值轴),ValueAxis又有3个子类:DateAxis(时间轴)、NumberAxis(数字轴)、PeriodAxis(时期轴)。这些坐标轴还有更详细的子类,不再一一列举

Axis对象可进行的操作有:标题的设置(内容、字体、Paint、显示角度等)、坐标线的设置(笔画、Paint、是否可见等)、刻度线的设置(是否可见、笔画、Paint、位于绘图区域的长度、位于绘图区域外的长度等)、刻度标示的设置(笔画、Paint、字体、与轴的距离等)、坐标轴范围设置等。

CategoryAxis对象还可以进行的操作有:刻度标示间距设置(最小间距、最大间距、指定间距)等。

ValueAxis对象可进行的操作有:轴端设置(显示的图形形状)、范围设置(是否自动产生范围、自动产生的最小范围、最大范围、指定确定范围、指定范围大小等)、间隔设置(是否自动产生间隔、指定间隔)等。

DateAxis对象还有对时间刻度显示格式的设置操作。

2.4 子标题对象

    子标题对象是Title类型的对象,一个JFreeChart可以有多个子标题对象。JFreeChart提供了5种Title的实现,可以是图片、文本、图例等的形式。

2.5数据源处理

JFreeChart中的数据源是DataSet接口类型。该接口有三个主要的子类接口:CategoryDataset、PieDataset、SeriesDataset

CategoryDataset接口的实现类基本上都维护了一个三元组<value,row,col>的列表结构。不同的实现类中value的类型不相同。<row,col>唯一确定一个三元组。CategoryDataset的实现类提供对这个三元组的增删改查操作。

PieDataset接口有两个主要的实现类:CategoryToPieDataset、DefaultPieDataset。

SeriesDataset接口的实现类基本上都维护了一种特定数据结构的列表。以TimeSeriesCollection为例。它维护一个TimeSeries对象列表,提供对该列表的增删查操作。每个TimeSeries对象维护一个<time,value>列表,提供对该列表的增删改查操作。

posted on 2010-07-20 20:29 donghang73 阅读(1506) 评论(0)  编辑  收藏 所属分类: 学习笔记

只有注册用户登录后才能发表评论。


网站导航: