jfreechart是jfree公司提供的一個java項目,它主要用來實現各種圖表,包括:餅圖,柱狀圖(普通柱狀圖和堆棧柱狀圖),折線圖,區域圖,分佈圖,混合圖,甘特圖,以及一些儀表盤等。
官方網站:http://jfree.org/。
pie 餅圖,line折線圖,bar柱狀圖,gantt甘特圖,xy plots and scatter plots,timer series, high/low/open/close charts and candle stick chart, combination charts, pareto charts, bubble charts, wind plots, meter charts and symbol charts
在使用jfreechart時,一般先通過ChartFactory中的靜態方法生成一個JFreeChart對象,然後調用ChartUtilities類中的方法將JFreeChart導出成圖片。
JFreeChart的問題估計就在結構的複雜性,每種類型的圖表都需要使用對應的DataSet和Plot才能生成出來,開發者必須掌握這些模型和結構之間的關係才能生成出計劃中的圖表來。
factory模式讓JFreeChart不是很容易擴展,多種數據模型和設計模型散亂着放在幾個包中,實話說真是太難找了。
JFreeChart還自帶一系列的中文亂碼問題,必須重新指定所有標籤部分的字體才能解決亂碼問題。
cewolf是一套可以使用taglib生成JFreeChart的標籤庫。
JFreeChart還支持servlet生成圖表,更多時候可以在swing裏直接顯示圖片。JFreeChart還提供了其他工具類,用來生成可以輔助圖表的一些功能,比如ImageMap。
圖表JFreeChart
2.1. 簡單柱狀圖
首先爲柱狀圖準備數據,柱狀圖必須使用CategoryDataset,這裏我們使用DefaultCategoryDataset。
每調用一次addValue()就會向Dataset中添加一條數據,在圖表中看來就是一個柱狀矩形,第一個參數100是柱狀矩形的長度,第二個參數表示數據的名稱,,第三個參數表示數據的分類。
有了圖表數據,下一步使用這些數據創建一個柱狀圖表。
最後使用ChartUtilities將chart導出爲PNG圖片。
圖 2.1. 簡單柱狀圖
完整代碼如下所示:
2.2. 水平柱狀圖
把PlotOrientation.VERTICAL改成PlotOrientation.HORIZONTAL,柱狀圖就從豎直的變成了水平的。
圖 2.2. 水平柱狀圖
2.3. 三維柱狀圖
使用createBarChart3D就會生成三維柱狀圖。
2.4. 分組柱狀圖
DefaultCategoryDataset支持分組統計,我們只需要在addValue()時爲數據指定分組類型,顯示柱狀圖時會自動根據類別分組顯示。
效果如圖:
圖 2.4. 分組柱狀圖
2.5. 負向座標
爲dataset添加一個負值,就可以在圖標上顯示出負向座標了。
dataset.addValue(-20,"Ext JS","Jan");
圖 2.5. 負向座標
TODO
SlidingCategoryDataset
IntervalBar
LayeredBar
survey
設置Label
隱藏axis
中文
背景顏色
3.1. 簡單餅圖
餅圖必須使用DefaultPieDataset爲圖表提供數據。
這次我們使用setValue向dataset中添加數據,第一個參數是數據的名稱,第二個數據是數據的值。
這裏就暴露出JFreeChart的一個問題,竟然不能使用統一的dataset接口來設置數據。
下一步通過CharFactory的createPieChart方法創建餅圖。
最後使用CharUtilities將JFreeChart導出成圖片。
完整代碼如下所示:
3.2. 炸開的餅圖
把餅圖中的某一部分提取出來,強調顯示。
調用PiePlot中的setExplodePercent方法來實現這一功能。
這裏又暴露出一個JFreeChart裏的問題,獲得Plot也要強制轉換成對應的類型才能使用。
圖 3.2. 炸開的餅圖
3.3. 處理空值和負值
如果設置了值爲0或null的值,圖表中會顯示標籤,但是我們看不到數值。
圖 3.3. 空值和負值
如果不希望在圖表中顯示爲空的數據,需要調用PiePlot的兩個方法。
JFreeChart會一直忽略負值,不需要特殊處理就不會顯示在圖表中。
3.4. 三維餅圖
將createPieChart替換爲createPieChart3D就可以實現三維餅圖。
圖 3.4. 三維餅圖
3.5. 多重餅圖
要想使用多重餅圖,必須先把PieDataset改成CategoryDataset。
第二步,使用createMultiplePieChart生成多重報表。
圖 3.5. 多重報表
TODO:
color
outlines
label