jFreeChart是Java開發中常用的統計類組件,主要包括柱狀圖,餅狀圖等。下面我們介紹一下jFreeChart最簡單的用法。
首先需要導入jFreeChart的jar包,放在項目web\WEB-INF\lib文件夾下。然后我們以最簡潔的代碼實現一個統計功能。
1.柱狀圖
import java.awt.Color;
import java.awt.Font;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;

 public class BarChartTest {
 public static void main(String[] args) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(20, "企業備案數", "北京局");
dataset.addValue(18, "企業備案數", "上海局");
dataset.addValue(16, "企業備案數", "天津局");
dataset.addValue(15, "企業備案數", "重慶局");
dataset.addValue(45, "企業備案數", "山東局");
JFreeChart chart = ChartFactory.createBarChart("企業備案圖", "直屬局", "企業備案數",dataset, PlotOrientation.HORIZONTAL, true, false, false);
 /** *//***************A start*********/
//設置標題字體樣式
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("黑體", Font.PLAIN, 20));
//設置柱狀體顏色
CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
categoryplot.getRenderer().setSeriesPaint(0, new Color(228,109,10));
NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
CategoryAxis domainAxis = categoryplot.getDomainAxis();
//設置X軸坐標上的字體樣式
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
//設置X軸的標題字體樣式
domainAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));
//設置Y軸坐標上的字體樣式
numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
//設置Y軸的標題字體樣式
numberaxis.setLabelFont(new Font("黑體", Font.PLAIN, 12));
//設置圖片最底部字體樣式
 if (chart.getLegend() != null) {
chart.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 12));
}
 /** *//***************A end*********/
 try {
ChartUtilities.writeChartAsPNG(new FileOutputStream("D:\\barChart.jpg"), chart, 400, 200);
 } catch (FileNotFoundException e) {
e.printStackTrace();
 } catch (IOException e) {
e.printStackTrace();
}
}
}

生成的文件顯示效果如下:

2.餅狀圖
import java.awt.Color;
import java.awt.Font;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;

 public class PieChartTest {
 public static void main(String[] args) {
DefaultPieDataset pieDataset = new DefaultPieDataset();
pieDataset.setValue("北京局",20);
pieDataset.setValue("上海局",18);
pieDataset.setValue("天津局",16);
pieDataset.setValue("重慶局",15);
pieDataset.setValue("山東局",45);
JFreeChart chart = ChartFactory.createPieChart3D("企業備案圖",pieDataset, true, false, false);
 /** *//***************A start*********/
//設置標題字體樣式
chart.getTitle().setFont(new Font("黑體",Font.BOLD,20));
//設置餅狀圖里描述字體樣式
PiePlot piePlot= (PiePlot) chart.getPlot();
piePlot.setLabelFont(new Font("黑體",Font.BOLD,10));
//設置顯示百分比樣式
piePlot.setLabelGenerator(new StandardPieSectionLabelGenerator(
("{0}({2})"), NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%")));
//設置統計圖背景
piePlot.setBackgroundPaint(Color.white);
//設置圖片最底部字體樣式
chart.getLegend().setItemFont(new Font("黑體",Font.BOLD,10));
 /** *//***************A end*********/
 try {
ChartUtilities.writeChartAsPNG(new FileOutputStream("D:\\pieChart.jpg"), chart, 400, 300);
 } catch (FileNotFoundException e) {
e.printStackTrace();
 } catch (IOException e) {
e.printStackTrace();
}
}

}

生成的文件顯示效果如下:

其中以上兩段代碼中的“A”代碼塊中的內容是為了解決圖片生成過程中遇到的亂碼問題,在實際開發中可以寫到一個公共類中,此時應注意服務器的操作系統上是否缺少上述代碼中所用到的字體。關于jFreeChart詳細參數的使用請參考官方文檔。
|