程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 用jfreechart來生成統計圖表

用jfreechart來生成統計圖表

編輯:關於JAVA

在工作中,我們常常碰到需要在網頁上繪制統計圖的例子。其實實現的辦法有很多,我們可以親自編寫全部圖形生成代碼,比如用flash,或者用svg,這樣做代碼量很大,還容易出錯,很煩的。也可以利用現成的java統計圖表庫。例如用jclass(http://java.quest.com/jclass/jclass.shtml),可是這玩藝卻是要收費的。對於我們這種崇尚open source的程序員來說,有沒有一個開源的統計圖形庫呢。有,它就是www.jfree.org推出的jfreechart包,它從柱形圖,餅形圖,到雷達圖,蠟燭圖等等無所不包,可以在c/s,b/s,甚至是實時環境都能一顯身手。最關鍵的是它是open source!我在這裡給出一個在網頁上繪制餅形圖的簡單例子。

1、到www.jfree.org下載一個最新的java庫,置jfreechart.jar和jcommon.jar.jar於classpath中

2、編寫一個java bean,用來生成餅形圖。(GSPieChart.java)

package gov.gwssi.tax.nspg.datadisposal;
import java.awt.Insets;
import java.awt.Image;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Locale;
import java.text.NumberFormat;
import javax.servlet.http.HttpSession;
import org.jfree.data.*;
import org.jfree.chart.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.renderer.VerticalBarRenderer;
import org.jfree.chart.renderer.StandardXYItemRenderer;
import org.jfree.chart.plot.*;
import org.jfree.chart.entity.*;
import org.jfree.chart.tooltips.*;
import org.jfree.chart.urls.*;
import org.jfree.chart.servlet.*;
import java.awt.Font;
/**
  * <p>Title: </p>
  * <p>Description: </p>
  * <p>Copyright: Copyright (c) 2003</p>
  * <p>Company: </p>
  * @author jagie
  * @version 1.0
*/
public class GSPieChart
{
  public static void main(String[] args)
  {
   Long[] testData =
    {
     new Long(10), new Long(20), new Long(30), new Long(40)
    } ;
  generatePieChart(testData, "", null, new PrintWriter(System.out), 580, 250);
}
/**
  * 生成圖像文件
  * @param datas Long[]數組
  * @param targetUrl 點餅形圖上的扇形,定向到的url
  * @param session httpsession
  * @param pw PrintWriter
  * @param w 生成的圖的寬度
  * @param h 生成的圖的高度
  * @return 生成的圖像文件的路徑
*/
public static String generatePieChart
  (Long[] datas, String targetUrl,
   HttpSession session,
   PrintWriter pw, int w, int h)
  {
   String filename = null;
   try
   {
    DefaultPieDataset data = new DefaultPieDataset();
    data.setValue("正常納稅人", datas[0]);
    data.setValue("異常納稅人", datas[1]);
    data.setValue("數據不全納稅人", datas[2]);
    data.setValue("未處理納稅人", datas[3]);
    // Create the chart object
    Pie3DPlot plot = new Pie3DPlot(data);
    plot.setInsets(new Insets(0, 5, 5, 5));
    plot.setForegroundAlpha(0.6f);
    plot.setSectionLabelType(plot.NO_LABELS);
    plot.setURLGenerator(new StandardPieURLGenerator(targetUrl, "type"));
    plot.setToolTipGenerator(new StandardPieToolTipGenerator());
    JFreeChart chart = new JFreeChart("數據處理結果統計圖", JFreeChart.DEFAULT_TITLE_FONT, plot, true);
    chart.setTitle(new TextTitle("數據處理結果統計圖", new Font("黑體", Font.BOLD, 15)));
    StandardLegend sl = (StandardLegend) chart.getLegend();
    sl.setItemFont(new Font("黑體", Font.TRUETYPE_FONT, 12));
    chart.setBackgroundPaint(new java.awt.Color(254, 254, 141));
    // 因為jfreechart把生成的png文件保存在系統的臨時文件夾中,你需要在適當的
    //時候調用session.removeAttribute("JFreeChart_Deleter"),這樣可以保證png文
    //件被刪除掉
    ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
    filename = ServletUtilities.saveChartAsPNG(chart, w, h, info, session);
    // Write the image map to the PrintWriter
    ChartUtilities.writeImageMap(pw, filename, info); pw.flush();
   } catch (Exception e)
    {
     System.out.println("Exception - " + e.toString());
     e.printStackTrace(System.out);
     filename = "public_error_500x300.png";
    }
  return filename;
  }
}

3、在一個jsp文件中使用這個javabean來生成圖像,以下是代碼片斷

java代碼

<%
  //以下部分為圖象輸出
  String argetUrl="../servlet/gov.gwssi.tax.nspg.controlservlet.GSMainControlServlet?id="+sid;Long[] datas={normals,new Long(totalAbnormal),dataLacks,notProcesses};
String filename=GSPieChart.generatePieChart(datas,targetUrl,session,new PrintWriter(out),580,250);
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
%>

html代碼

<!-- pie chart -->
<table width="580" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<img src="<%= graphURL %>" width=580 height=250 border=0 usemap="#<%=filename %>">
</td>
</tr>
</table>

4、在web.xml中配置jfreechart的圖像生成的servlet

<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>

以上就是在b/s中使用jfreechart的大體步驟,在你下載的jfreechart的sample文件夾中找到jfreechart-sample.war文件中也有類似的例子,只不過復雜一些。

最後,希望這篇文章能對你有所啟發。如有錯誤之處,歡迎批評指正。

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