JFreeChart是開放源代碼站點(diǎn)SourceForge.net上的一個JAVA項目,它主要用來各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普 通柱狀圖以及堆棧柱狀圖)、線圖、區(qū)域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。這些不同式樣的圖表基本上可以滿足目前的要求。為了減少篇幅本文主 要介紹前面三種類型的圖表,讀者可以觸類旁通去開發(fā)其他樣式的圖表。
這里有點(diǎn)筆者在開發(fā)中遇見的問題需要注意的是:在使用Eclipse開發(fā)的時候會報一個莫名其妙的錯誤,錯誤可能指向某個類文件的第一行。遇到這樣的問題一般是因為沒有把Jcommon的jar包設(shè)置到項目的類路徑中的緣故。具體的原因不祥。
對于餅圖而言,數(shù)據(jù)集的獲取用的不是同一個數(shù)據(jù)集類,另外餅圖不支持同一個類別的項目中還有子項目這樣的數(shù)據(jù)。我們只給出創(chuàng)建餅圖的代碼,至于寫圖表到一個文件則與柱狀圖一致,無需重復(fù)..
實(shí)例代碼如下:
package com.dr.demo;
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.CategoryLabelPositions;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
/**
*
* @author 詹成榜
* @date 2010-2-25
* @ClassName PolyLine.java
* @Email 289153044@qq.com
* @param 餅圖
* @param
*/
public class SalesCountServlet {
protected static void doGet() {
System.out.println("圖表已經(jīng)建立!");
CategoryDataset dataset = getDataSet();
String fileName = "SalesCount.jpg";//文件名稱
JFreeChart chart = ChartFactory.createBarChart3D("產(chǎn)品銷量圖", // 圖表標(biāo)題
"產(chǎn)品", // 目錄軸的顯示標(biāo)簽
"銷量", // 數(shù)值軸的顯示標(biāo)簽
dataset, // 數(shù)據(jù)集
PlotOrientation.VERTICAL, // 圖表方向:水平、垂直
true, // 是否顯示圖例(對于簡單的柱狀圖必須是false)
false, // 是否生成工具
false // 是否生成URL鏈接
);
configFont(chart);//設(shè)置中文格式
FileOutputStream fos_jpg = null;
try {
String statImagePath = "d:";//存放文件的路徑
try {
fos_jpg = new FileOutputStream(statImagePath+ fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
ChartUtilities.writeChartAsJPEG(fos_jpg, 0.5f, chart, 400, 300,null);
} catch (IOException e) {
e.printStackTrace();
}
} finally {
try {
fos_jpg.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void configFont(JFreeChart chart){
// 配置字體
Font xfont = new Font("宋體",Font.PLAIN,12) ;// X軸
Font yfont = new Font("宋體",Font.PLAIN,12) ;// Y軸
Font kfont = new Font("宋體",Font.PLAIN,12) ;// 底部
Font titleFont = new Font("隸書", Font.BOLD , 25) ; // 圖片標(biāo)題
CategoryPlot plot = chart.getCategoryPlot();// 圖形的繪制結(jié)構(gòu)對象
// 圖片標(biāo)題
chart.setTitle(new TextTitle(chart.getTitle().getText(),titleFont));
// 底部
chart.getLegend().setItemFont(kfont);
// X 軸
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLabelFont(xfont);// 軸標(biāo)題
domainAxis.setTickLabelFont(xfont);// 軸數(shù)值
domainAxis.setTickLabelPaint(Color.BLUE) ; // 字體顏色
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 橫軸上的label斜顯示
// Y 軸
ValueAxis rangeAxis = plot.getRangeAxis();
rangeAxis.setLabelFont(yfont);
rangeAxis.setLabelPaint(Color.BLUE) ; // 字體顏色
rangeAxis.setTickLabelFont(yfont);
}
private static CategoryDataset getDataSet() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(20, "銷售圖表", "蘋果");
dataset.addValue(20, "銷售圖表", "梨");
dataset.addValue(30, "銷售圖表", "香蕉");
dataset.addValue(40, "銷售圖表", "葡萄");
dataset.addValue(50, "銷售圖表", "桔子");
return dataset;
}
public static void main(String args[]){
doGet();
}
}