3.1. 簡單餅圖
餅圖必須使用DefaultPieDataset為圖表提供數據。
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Spring Security", 100);
dataset.setValue("jBPM 4", 200);
dataset.setValue("Ext JS", 300);
dataset.setValue("JFreeChart", 100);
這次我們使用setValue向dataset中添加數據,第一個參數是數據的名稱,第二個數據是數據的值。
這裡就暴露出JFreeChart的一個問題,竟然不能使用統一的dataset接口來設置數據。
下一步通過CharFactory的createPieChart方法創建餅圖。
JFreeChart chart = ChartFactory.createPieChart(
"chart", // 標題
dataset, // 數據
true, // 是否使用legend
false, // 是否使用tooltip
false // 是否使用url鏈接
);
最後使用CharUtilities將JFreeChart導出成圖片。
圖 3.1. 簡單餅圖
完整代碼如下所示:
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Spring Security", 100);
dataset.setValue("jBPM 4", 200);
dataset.setValue("Ext JS", 300);
dataset.setValue("JFreeChart", 100);
JFreeChart chart = ChartFactory.createPieChart("chart", dataset,
true, false, false);
FileOutputStream fos = null;
try {
fos = new FileOutputStream("target/pie1.png");
ChartUtilities.writeChartAsPNG(fos, chart, 400, 300);
} finally {
fos.close();
}
3.2. 炸開的餅圖
把餅圖中的某一部分提取出來,強調顯示。
調用PiePlot中的setExplodePercent方法來實現這一功能。
PiePlot plot = (PiePlot) chart.getPlot();
plot.setExplodePercent("JFreeChart", 0.3);
這裡又暴露出一個JFreeChart裡的問題,獲得Plot也要強制轉換成對應的類型才能使用。
圖 3.2. 炸開的餅圖
3.3. 處理空值和負值
如果設置了值為0或null的值,圖表中會顯示標簽,但是我們看不到數值。
dataset.setValue("null", null);
dataset.setValue("zero", 0);
圖 3.3. 空值和負值
如果不希望在圖表中顯示為空的數據,需要調用PiePlot的兩個方法。
plot.setIgnoreZeroValues(true);
plot.setIgnoreNullValues(true);
JFreeChart會一直忽略負值,不需要特殊處理就不會顯示在圖表中。
3.4. 三維餅圖
將createPieChart替換為createPieChart3D就可以實現三維餅圖。
圖 3.4. 三維餅圖
3.5. 多重餅圖
要想使用多重餅圖,必須先把PieDataset改成CategoryDataset。
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "Spring Security", "Jan");
dataset.addValue(200, "jBPM 4", "Jan");
dataset.addValue(300, "Ext JS", "Jan");
dataset.addValue(100, "JFreeChart", "Jan");
dataset.addValue(60, "Spring Security", "Fer");
dataset.addValue(100, "jBPM 4", "Fer");
dataset.addValue(340, "Ext JS", "Fer");
dataset.addValue(130, "JFreeChart", "Fer");
第二步,使用createMultiplePieChart生成多重報表。
JFreeChart chart = ChartFactory.createMultiplePieChart(
"chart",
dataset,
TableOrder.BY_COLUMN, // 按列分割餅圖,addValue中的第三個參數
true,
false,
false
);
圖 3.5. 多重報表
TODO:
color
outlines
label