jfreechart产生饼状图,折线图,柱状图

第一步:导入三个JAR包: gnujaxp.jar (在SSH整合时会出现冲突可不要,不影响使用), jcommon-1.0.0.jar,jfreechart-1.0.1.jar
第二步:创建工具类ChartUtil
package com.wnkj.util;

import java.awt.Color;
import java.io.PrintWriter;
import javax.servlet.http.HttpSession;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.servlet.ChartDeleter;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

public class ChartUtil {
//  产生时间序列图,返回图片名称

   
public  static String generatePieChart(DefaultPieDataset dataset,String title,int width,int height,HttpSession session, PrintWriter pw) {  
 
String filename = null;  
 try {  
 if (session != null)  
  
ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");  
 session.removeAttribute("JFreeChart_Deleter");  
 session.setAttribute("JFreeChart_Deleter", deleter);  
 
JFreeChart chart = ChartFactory.createPieChart3D(  
title,  //统计图名字 
dataset, // 数据集
true,   
true,  
false );  

ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());  

filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);  
 
 ChartUtilities.writeImageMap(pw, filename, info,true);  

 pw.flush();  
} catch (Exception e) {  
   e.printStackTrace(System.out);  
   filename = "picture_error.png"; }  
return filename;  
 


public  static String generateBarChart(DefaultCategoryDataset dataset,String title,String title1,String title2,int width,int height,HttpSession session, PrintWriter pw) {

String filename = null;
 try {
 if (session != null)
 {
ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");
 session.removeAttribute("JFreeChart_Deleter");
 session.setAttribute("JFreeChart_Deleter", deleter);
}
 PlotOrientation plo =  PlotOrientation.VERTICAL;//一定要有,
JFreeChart chart = ChartFactory.createBarChart3D(
        title,       //统计图的名字
        title1,    //X轴名字
        title2,    //   Y轴名字
        dataset, // 数据集,注意:跟饼图的数据集不一样
        plo,
       true, 
       false,
      false );

//-------------------------------------------------------------------------
//显示每个柱的数值
CategoryPlot plot = chart.getCategoryPlot();
BarRenderer3D renderer = new BarRenderer3D();
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemLabelsVisible(true);

//设置每种水果代表的柱的颜色
renderer.setSeriesPaint(0, new Color(0,0,255));
renderer.setSeriesPaint(1, new Color(0,100,255));
renderer.setSeriesPaint(2, Color.GREEN);
plot.setRenderer(renderer);

//设置柱的透明度,数值时float型
plot.setForegroundAlpha(0.6f);

//设置轴名的显示位置
plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
//-------------------------------------------------------------------------------

ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());

filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);

 ChartUtilities.writeImageMap(pw, filename, info,true);
 
 pw.flush();
 
} catch (Exception e) {
    e.printStackTrace(System.out);
    filename = "picture_error.png"; }
return filename;



public  static String generateLineChart(DefaultCategoryDataset dataset,String title,String title1,String title2,int width,int height,HttpSession session, PrintWriter pw){
    String filename = null;
     try {
     if (session != null)
     {
    ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");
     session.removeAttribute("JFreeChart_Deleter");
     session.setAttribute("JFreeChart_Deleter", deleter);
    }
     
     JFreeChart chart = ChartFactory.createLineChart(
                title, // 折线图的名字
                title1, // X轴的名字
                title2, // Y轴的名字
                dataset, // 数据集
                PlotOrientation.VERTICAL,
                true,
                true,
                false
                );

     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());

     filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);

      ChartUtilities.writeImageMap(pw, filename, info,true);
     
      pw.flush();
     
     } catch (Exception e) {
         e.printStackTrace(System.out);
         filename = "picture_error.png"; }
     return filename;
  }
}
第三步:封装数据集   (servlet层)
1.饼状图封装数据集 DefaultPieDataset defaultpiedataset = new DefaultPieDataset();
    defaultpiedataset.setValue("yiyue", 300);
    defaultpiedataset.setValue("eryue", 260);
    defaultpiedataset.setValue("sanyue", 400);
2.柱状图封装数据集 String [] title = {"苹果","李子","香蕉"};
    String [] title1 = {"上海","广州","深圳"};
    double [][]  shu =new double[][] {{100,200,300},{200,300,400},{300,400,500}};
    DefaultCategoryDataset defaultCategoryDatase =(DefaultCategoryDataset)                    DatasetUtilities.createCategoryDataset(title, title1, shu);
3.折线图封装数据集 DefaultCategoryDataset linedataset = new DefaultCategoryDataset();
               //  各曲线名称
    String series1 = "冰箱";
    String series2 = "彩电";
    String series3 = "洗衣机";
               //    横轴名称(列名称)
    String type1 = "1月";
    String type2 = "2月";
    String type3 = "3月";

     linedataset.addValue(0.0, series1, type1);
     linedataset.addValue(4.2, series1, type2);
     linedataset.addValue(3.9, series1, type3);

      linedataset.addValue(1.0, series2, type1);
      linedataset.addValue(5.2, series2, type2);
      linedataset.addValue(7.9, series2, type3);

      linedataset.addValue(2.0, series3, type1);
      linedataset.addValue(9.2, series3, type2);
      linedataset.addValue(8.9, series3, type3);
第四步:在JSP页面引用
1.饼状图的引用
<%
DefaultPieDataset piedataset=(DefaultPieDataset)request.getAttribute("piedataset");
// 用ChartUtil工具类产生图片 (饼图)
String p = ChartUtil.generatePieChart(piedataset," 项目收支线图",500,300,null, new PrintWriter(out));
String p1 = request.getContextPath() + "/servlet/DisplayChart?filename=" + p;  
%>
<td><img src="<%= p1 %>" width=500 height=300 border=0 usemap="#<%= p %>"></td>
2.柱状图和折线图的引用
 DefaultCategoryDataset defaultCategoryDatase =(DefaultCategoryDataset) request.getAttribute("list");
 String p = ChartUtil.generateBarChart(defaultCategoryDatase," 水果销量统计图","水果","销量",500,300,null, new PrintWriter(out)); 
String p1 = request.getContextPath() + "/servlet/DisplayChart?filename=" + p;  
%>
<td><img src="<%= p1 %>" width=500 height=300 border=0 usemap="#<%= p %>"></td>
第五步:在web.xml中添加配置
<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>
第六步:打开浏览器测试吧

记得将编码格式统一成utf-8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值