`
沙漠魚
  • 浏览: 39756 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

深入探究JFreeChart(1)

阅读更多


1??简介

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

JFreeChart?可以生成很多图形对象,它的工厂类提供了?33?个工厂方法用于生成不同的图形对象(具体的工厂方法可以参见?JFreeChart?的?API?手册或者源码中的?ChartFactory?类?)。??????????????JFreechart?对图形对象的抽象具体化。图形对象(?JFreeChart?),由?Title(?主标题?)?,?SubTitle?(子标题?)?,?Plot?(图形的绘制结构)等几个主要对象组成。各个组成部分如下图所示:

这是一个?JFreeChart?对象,上面的“?chart?标题”是?Title?对象,中间区域是?Plot?对象(包括绘图区域和坐标轴区域),下面的区域是?LegendTitle?对象,是一种?SubTitle?对象。

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

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

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

JFreeChart?中有?18?种?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?对象本身完成。

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

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

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

不同的?Renderer?的实现类实现了不同的显示方式,在含有?Renderer?对象的?JFreeChart?对象中,?R?enderer?对象决定了JFreeChart对象的显示方式。例如:柱状图的Plot对象中默认的Renderer对象是?CategoryItemRenderer?对象,通过设置?Plot?对象的Renderer对象?为?LineAndShapeRenderer?,则柱状图变为线图。使用中一般不需要显式的实例化一个?R?enderer?对象,一般通过?JFreeChart?对象的?Plot?对象调用现有的?R?enderer?对象进行重新设置等操作。
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的实现,可以是图片、文本、图例等的形式。

(数据源以及常用图形的处理以及进一步的讨论在后续文章中介绍)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics