程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 報表應用系列——圖表JFreeChart: 第3章 餅狀圖

報表應用系列——圖表JFreeChart: 第3章 餅狀圖

編輯:關於JAVA

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved