深入探究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 31 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 32 Axis對象

JFreeChart 提供了兩種類型的座標軸: CategoryAxis (等級軸)和 ValueAxis (值軸), ValueAxis 又有 3 個子類: DateAxis (時間軸)、 NumberAxis (數字軸)、 PeriodAxis (時期軸)。這些座標軸還有更詳細的子類,不再一一列舉

Axis 對象可進行的操作有:標題的設置(內容、字體、Paint、顯示角度等)、座標線的設置(筆畫、Paint、是否可見等)、刻度線的設置(是否可見、筆畫、Paint、位於繪圖區域的長度、位於繪圖區域外的長度等)、刻度標示的設置(筆畫、Paint、字體、與軸的距離等)、座標軸範圍設置等。

CategoryAxis 對象還可以進行的操作有: 刻度標示間距 設置( 最小間距、最大間距、指定間距)等。

ValueAxis 對象可進行的操作有:軸端設置(顯示的圖形形狀)、範圍設置(是否自動產生範圍、自動產生的最小範圍、最大範圍、指定確定範圍、指定範圍大小等)、間隔設置(是否自動產生間隔、指定間隔)等。

DateAxis 對象還有對時間刻度顯示格式的設置操作。

2 4 子標題對象

    子標題對象是 Title 類型的對象,一個JFreeChart可以有多個子標題對象。JFreeChart提供了5Title的實現,可以是圖片、文本、圖例等的形式。

(數據源以及常用圖形的處理以及進一步的討論在後續文章中介紹)


(本文首次發表於:http://www.blogjava.net/JavaExplore/archive/2006/09/01/67217.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章