jfreechart 的各种图种封装

jfreechart 的各种图类封装

上代码:

package com.myc.app.common;

import java.awt.Color;
import java.awt.Font;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
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.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DefaultPieDataset;


/***
 * Jfreechart
 *
 * @author 朱湘鄂
 *
 */
public class JfreeChart {

 // 2D饼图方法
 public static String generatePieChart(DefaultPieDataset dataset, String title,int w, int h) {  
     HttpServletRequest  request=ServletActionContext.getRequest();
        HttpSession session = request.getSession(); 
        StringWriter strWriter=new StringWriter();
        PrintWriter pw=new PrintWriter(strWriter);
     String filename = "";
     String fname="";
   // 2D图
   JFreeChart chart = ChartFactory.createPieChart(
     title, // 图表标题
     dataset, // 数据集
     true, // 是否显示图例
     true, // 是否生成工具
     false // 是否生成URL链接
     );
   chart.setBackgroundPaint(Color.pink);
   try {
    // ------得到chart的保存路径----
    ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
    filename = ServletUtilities.saveChartAsJPEG(chart, w, h,info, session);
    // ------使用printWriter将文件写出----
    ChartUtilities.writeImageMap(pw, filename, info, true);
    pw.flush();
    pw.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ;
  return fname;
 }
 
 // 3D饼图方法
 public static String generatePieChart3D(DefaultPieDataset dataset, String title,int w, int h) {  
     HttpServletRequest  request=ServletActionContext.getRequest();
        HttpSession session = request.getSession(); 
        StringWriter strWriter=new StringWriter();
        PrintWriter pw=new PrintWriter(strWriter);
     String filename = "";
     String fname="";
   // 3D图
     JFreeChart chart = ChartFactory.createPieChart3D(
     title, // 图表标题
     dataset, // 数据集
     true, // 是否显示图例
     true, // 是否生成工具
     false // 是否生成URL链接
     );
   chart.setBackgroundPaint(Color.pink);
   try {
    // ------得到chart的保存路径----
    ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
    filename = ServletUtilities.saveChartAsJPEG(chart, w, h,info, session);
    // ------使用printWriter将文件写出----
    ChartUtilities.writeImageMap(pw, filename, info, true);
    pw.flush();
    pw.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ;
  return fname;
 }
 
 // 3D水平柱状图
 public static String generateBarChart3D(CategoryDataset dataset,String title,String catalog,String valueaxis,int w, int h) {  
  HttpServletRequest  request=ServletActionContext.getRequest();
     HttpSession session = request.getSession(); 
     StringWriter strWriter=new StringWriter();
     PrintWriter pw=new PrintWriter(strWriter);
  String filename = "";
  String fname="";
     JFreeChart chart = ChartFactory.createBarChart3D(
       title, // 图表标题
       catalog, //目录轴的显示标签
    valueaxis, //数值轴的显示标签
    dataset, // 数据集
    PlotOrientation.HORIZONTAL, // 图表方向:水平
    true, // 是否显示图例(对于简单的柱状图必须是false)
    false, // 是否生成工具
    false // 是否生成URL链接
    );
  try {
   // 得到chart的保存路径
   ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
   filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);
   // 使用printWriter将文件写出
   ChartUtilities.writeImageMap(pw, filename, info, true);
   pw.flush();
   pw.close();
  } catch (IOException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  }
  fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ;
  return fname;
 }
 
 // 2D水平柱状图
 public static String generateBarChart2D(CategoryDataset dataset,String title,String catalog,String valueaxis,int w, int h) {  
  HttpServletRequest  request=ServletActionContext.getRequest();
     HttpSession session = request.getSession(); 
     StringWriter strWriter=new StringWriter();
     PrintWriter pw=new PrintWriter(strWriter);
  String filename = "";
  String fname="";
     JFreeChart chart = ChartFactory.createBarChart(
       title, // 图表标题
       catalog, //目录轴的显示标签
    valueaxis, //数值轴的显示标签
    dataset, // 数据集
    PlotOrientation.HORIZONTAL, // 图表方向:水平
    true, // 是否显示图例(对于简单的柱状图必须是false)
    false, // 是否生成工具
    false // 是否生成URL链接
    );
  try {
   // 得到chart的保存路径
   ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
   filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);
   // 使用printWriter将文件写出
   ChartUtilities.writeImageMap(pw, filename, info, true);
   pw.flush();
   pw.close();
  } catch (IOException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  }
  fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ;
  return fname;
 }

 // 3D纵向柱状图
 public static String generateBarChartHeng3D(CategoryDataset dataset,String title,String catalog,String valueaxis,int w, int h) {  
  HttpServletRequest  request=ServletActionContext.getRequest();
     HttpSession session = request.getSession(); 
     StringWriter strWriter=new StringWriter();
     PrintWriter pw=new PrintWriter(strWriter);
  String filename = "";
  String fname="";
     JFreeChart chart = ChartFactory.createBarChart3D(
       title, // 图表标题
       catalog, //目录轴的显示标签
    valueaxis, //数值轴的显示标签
    dataset, // 数据集
    PlotOrientation.VERTICAL, // 图表方向:纵向
    true, // 是否显示图例(对于简单的柱状图必须是false)
    false, // 是否生成工具
    false // 是否生成URL链接
    );
  try {
   // 得到chart的保存路径
   ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
   filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);
   // 使用printWriter将文件写出
   ChartUtilities.writeImageMap(pw, filename, info, true);
   pw.flush();
   pw.close();
  } catch (IOException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  }
  fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ;
  return fname;
 }
 
 // 2D纵向柱状图
 public static String generateBarChartHeng2D(CategoryDataset dataset,String title,String catalog,String valueaxis,int w, int h) {  
  HttpServletRequest  request=ServletActionContext.getRequest();
     HttpSession session = request.getSession(); 
     StringWriter strWriter=new StringWriter();
     PrintWriter pw=new PrintWriter(strWriter);
  String filename = "";
  String fname="";
     JFreeChart chart = ChartFactory.createBarChart(
       title, // 图表标题
       catalog, //目录轴的显示标签
    valueaxis, //数值轴的显示标签
    dataset, // 数据集
    PlotOrientation.VERTICAL, // 图表方向:水平
    true, // 是否显示图例(对于简单的柱状图必须是false)
    false, // 是否生成工具
    false // 是否生成URL链接
    );
  try {
   // 得到chart的保存路径
   ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
   filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);
   // 使用printWriter将文件写出
   ChartUtilities.writeImageMap(pw, filename, info, true);
   pw.flush();
   pw.close();
  } catch (IOException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  }
  fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ;
  return fname;
 }
 
  //区域图
   public static String generateAddressChart(CategoryDataset createDataset,String title,String hengTitle,String zongtitle,int w,int h){
      HttpServletRequest  request=ServletActionContext.getRequest();
      HttpSession session = request.getSession(); 
      StringWriter strWriter=new StringWriter();
      PrintWriter pw=new PrintWriter(strWriter);
   String filename = "";
   String fname="";
     JFreeChart chart = ChartFactory.createAreaChart(        
     title,         //图表标题               
     hengTitle,                     //横轴标题            
     zongtitle,                   //纵轴标题                
     createDataset,       //绘图数据集         
     PlotOrientation.VERTICAL,  //定义区域图的方向为纵向           
     true,                           //是否显示图例标识           
     true,                           //是否显示tooltips       
     false);                     //是否支持超链接          //设置标题字体     
    chart.getTitle().setFont(new Font("隶书", Font.BOLD, 25));       
    //设置图例类别字体       
    chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));    
    //设置背景色     
    chart.setBackgroundPaint(new Color(160,214,248));     
    //获取绘图区对象    
    @SuppressWarnings("unused")
  CategoryPlot plot = chart.getCategoryPlot(); 
     try {
     //------得到chart的保存路径---- 
     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
     filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);
     //------使用printWriter将文件写出----
     ChartUtilities.writeImageMap(pw, filename, info, true);
     pw.flush();
     pw.close();
    } catch (IOException e) {
     // TODO 自动生成 catch 块
     e.printStackTrace();
    }
     fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ;
    return fname;
   }
 
   //3D纵向堆栈图
   public static String generateStockChartZong3D(CategoryDataset dataset,String title,String hengTitle,String zongtitle,int w,int h){
     HttpServletRequest  request=ServletActionContext.getRequest();
     HttpSession session = request.getSession(); 
     StringWriter strWriter=new StringWriter();
     PrintWriter pw=new PrintWriter(strWriter);
     String filename = "";
     String fname="";
    JFreeChart chart = ChartFactory.createStackedBarChart3D(        
      title,         //图表标题               
      hengTitle,                   //横轴标题            
      zongtitle,                   //纵轴标题                
      dataset,                    //绘图数据集         
      PlotOrientation.VERTICAL,  //定义区域图的方向为纵向           
      true,                           //是否显示图例标识           
      true,                           //是否显示tooltips       
      false);                     //是否支持超链接          //设置标题字体     
    chart.getTitle().setFont(new Font("隶书", Font.BOLD, 25));       
    //设置图例类别字体       
    chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));    
    //设置背景色     
    chart.setBackgroundPaint(new Color(160,214,248));     
    //获取绘图区对象    
    CategoryPlot plot = chart.getCategoryPlot(); 
     try {
     //------得到chart的保存路径---- 
     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
     filename = ServletUtilities.saveChartAsJPEG(chart, w, h, info,session);
     //------使用printWriter将文件写出----
     ChartUtilities.writeImageMap(pw, filename, info, true);
     pw.flush();
     pw.close();
    } catch (IOException e) {
     // TODO 自动生成 catch 块
     e.printStackTrace();
    }
     fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ; 
    return fname;
   }
  
   //3D横向堆栈图
   public static String generateStockChartHeng3D(CategoryDataset dataset,String title,String hengTitle,String zongtitle,int w,int h){
     HttpServletRequest  request=ServletActionContext.getRequest();
     HttpSession session = request.getSession(); 
     StringWriter strWriter=new StringWriter();
     PrintWriter pw=new PrintWriter(strWriter);
     String filename = "";
     String fname="";
    JFreeChart chart = ChartFactory.createStackedBarChart3D(        
      title,         //图表标题               
      hengTitle,                   //横轴标题            
      zongtitle,                   //纵轴标题                
      dataset,                    //绘图数据集         
      PlotOrientation.HORIZONTAL,  //定义区域图的方向为横向           
      true,                           //是否显示图例标识           
      true,                           //是否显示tooltips       
      false);                     //是否支持超链接          //设置标题字体     
    chart.getTitle().setFont(new Font("隶书", Font.BOLD, 25));       
    //设置图例类别字体       
    chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));    
    //设置背景色     
    chart.setBackgroundPaint(new Color(160,214,248));     
    //获取绘图区对象    
    CategoryPlot plot = chart.getCategoryPlot(); 
     try {
     //------得到chart的保存路径---- 
     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
     filename = ServletUtilities.saveChartAsJPEG(chart, w, h, info,session);
     //------使用printWriter将文件写出----
     ChartUtilities.writeImageMap(pw, filename, info, true);
     pw.flush();
     pw.close();
    } catch (IOException e) {
     // TODO 自动生成 catch 块
     e.printStackTrace();
    }
     fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ; 
    return fname;
   }
  
   //2D纵向堆栈图
   public static String generateStockChartZong2D(CategoryDataset dataset,String title,String hengTitle,String zongtitle,int w,int h){
     HttpServletRequest  request=ServletActionContext.getRequest();
     HttpSession session = request.getSession(); 
     StringWriter strWriter=new StringWriter();
     PrintWriter pw=new PrintWriter(strWriter);
     String filename = "";
     String fname="";
    JFreeChart chart = ChartFactory.createStackedBarChart(        
      title,         //图表标题               
      hengTitle,                   //横轴标题            
      zongtitle,                   //纵轴标题                
      dataset,                    //绘图数据集         
      PlotOrientation.VERTICAL,  //定义区域图的方向为纵向           
      true,                           //是否显示图例标识           
      true,                           //是否显示tooltips       
      false);                     //是否支持超链接          //设置标题字体     
    chart.getTitle().setFont(new Font("隶书", Font.BOLD, 25));       
    //设置图例类别字体       
    chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));    
    //设置背景色     
    chart.setBackgroundPaint(new Color(160,214,248));     
    //获取绘图区对象    
    CategoryPlot plot = chart.getCategoryPlot(); 
     try {
     //------得到chart的保存路径---- 
     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
     filename = ServletUtilities.saveChartAsJPEG(chart, w, h, info,session);
     //------使用printWriter将文件写出----
     ChartUtilities.writeImageMap(pw, filename, info, true);
     pw.flush();
     pw.close();
    } catch (IOException e) {
     // TODO 自动生成 catch 块
     e.printStackTrace();
    }
     fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ; 
    return fname;
   }
  
   //2D横向堆栈图
   public static String generateStockChartHeng2D(CategoryDataset dataset,String title,String hengTitle,String zongtitle,int w,int h){
     HttpServletRequest  request=ServletActionContext.getRequest();
     HttpSession session = request.getSession(); 
     StringWriter strWriter=new StringWriter();
     PrintWriter pw=new PrintWriter(strWriter);
     String filename = "";
     String fname="";
    JFreeChart chart = ChartFactory.createStackedBarChart(        
      title,         //图表标题               
      hengTitle,                   //横轴标题            
      zongtitle,                   //纵轴标题                
      dataset,                    //绘图数据集         
      PlotOrientation.HORIZONTAL,  //定义区域图的方向为纵向           
      true,                           //是否显示图例标识           
      true,                           //是否显示tooltips       
      false);                     //是否支持超链接          //设置标题字体     
    chart.getTitle().setFont(new Font("隶书", Font.BOLD, 25));       
    //设置图例类别字体       
    chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));    
    //设置背景色     
    chart.setBackgroundPaint(new Color(160,214,248));     
    //获取绘图区对象    
    CategoryPlot plot = chart.getCategoryPlot(); 
     try {
     //------得到chart的保存路径---- 
     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
     filename = ServletUtilities.saveChartAsJPEG(chart, w, h, info,session);
     //------使用printWriter将文件写出----
     ChartUtilities.writeImageMap(pw, filename, info, true);
     pw.flush();
     pw.close();
    } catch (IOException e) {
     // TODO 自动生成 catch 块
     e.printStackTrace();
    }
     fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ; 
    return fname;
   }
  
  //2D线性图 
   public static String generateLineChart2D(CategoryDataset dataset,String title,String hengTitle,String zongtitle, int w,int h){
     HttpServletRequest  request=ServletActionContext.getRequest();
     HttpSession session = request.getSession(); 
     StringWriter strWriter=new StringWriter();
     PrintWriter pw=new PrintWriter(strWriter);
     String filename = "";
     String fname="";
     JFreeChart chart = ChartFactory.createLineChart(       
      title,                 //图表标题               
      hengTitle,             //横轴标题            
      zongtitle,                   //纵轴标题                
      dataset,                    //绘图数据集         
      PlotOrientation.VERTICAL,  //定义区域图的方向为纵向           
      true,                           //是否显示图例标识           
      true,                           //是否显示tooltips       
      false);                     //是否支持超链接   
        //设置标题字体     
     chart.getTitle().setFont(new Font("隶书",Font.BOLD, 25));       
     //设置图例类别字体       
     chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));    
     //设置背景色     
     chart.setBackgroundPaint(new Color(160,214,248));     
     //获取绘图区对象    
     CategoryPlot plot = chart.getCategoryPlot(); 
     try {
     //------得到chart的保存路径---- 
     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
     filename = ServletUtilities.saveChartAsJPEG(chart, w, h, info,session);
     //------使用printWriter将文件写出----
     ChartUtilities.writeImageMap(pw, filename, info, true);
     pw.flush();
     pw.close();
    } catch (IOException e) {
     // TODO 自动生成 catch 块
     e.printStackTrace();
    }
     fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ; 
    return fname;
   } 
  
 //2D线性图  纵轴不从0起
   public static String generateLineChart2Ds(CategoryDataset dataset,String title,String hengTitle,String zongtitle, int w,int h){
     HttpServletRequest  request=ServletActionContext.getRequest();
     HttpSession session = request.getSession(); 
     StringWriter strWriter=new StringWriter();
     PrintWriter pw=new PrintWriter(strWriter);
     String filename = "";
     String fname="";
     JFreeChart chart = ChartFactory.createLineChart(       
      title,                 //图表标题               
      hengTitle,             //横轴标题            
      zongtitle,                   //纵轴标题                
      dataset,                    //绘图数据集         
      PlotOrientation.VERTICAL,  //定义区域图的方向为纵向           
      true,                           //是否显示图例标识           
      true,                           //是否显示tooltips       
      false);                     //是否支持超链接 
     CategoryPlot categoryplot = (CategoryPlot)chart.getPlot();//获得 plot:3dBar为CategoryPlot
     NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
   //numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
   numberaxis.setAutoRangeIncludesZero(false);//设置Y轴的数据自动范围,不从0开始
   numberaxis.setAutoTickUnitSelection(false); //不自动设置刻度
   numberaxis.setAutoRangeMinimumSize(0.5d);
   //numberaxis.seta
   NumberTickUnit ntu= new NumberTickUnit(0.1d); //设置Y轴的刻度
   numberaxis .setTickUnit(ntu);
        //设置标题字体     
     chart.getTitle().setFont(new Font("隶书",Font.BOLD, 25));       
     //设置图例类别字体       
     chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));    
     //设置背景色     
     chart.setBackgroundPaint(new Color(160,214,248));     
     //获取绘图区对象    
     CategoryPlot plot = chart.getCategoryPlot(); 
     try {
     //------得到chart的保存路径---- 
     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
     filename = ServletUtilities.saveChartAsJPEG(chart, w, h, info,session);
     //------使用printWriter将文件写出----
     ChartUtilities.writeImageMap(pw, filename, info, true);
     pw.flush();
     pw.close();
    } catch (IOException e) {
     // TODO 自动生成 catch 块
     e.printStackTrace();
    }
     fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ; 
    return fname;
   } 
  
 //3D线性图 
   public static String generateLineChart3D(CategoryDataset dataset,String title,String hengTitle,String zongtitle, int w,int h){
     HttpServletRequest  request=ServletActionContext.getRequest();
     HttpSession session = request.getSession(); 
     StringWriter strWriter=new StringWriter();
     PrintWriter pw=new PrintWriter(strWriter);
     String filename = "";
     String fname="";
     JFreeChart chart = ChartFactory.createLineChart3D(       
      title,                 //图表标题               
      hengTitle,             //横轴标题            
      zongtitle,                   //纵轴标题                
      dataset,                    //绘图数据集         
      PlotOrientation.VERTICAL,  //定义区域图的方向为纵向           
      true,                           //是否显示图例标识           
      true,                           //是否显示tooltips       
      false);                     //是否支持超链接          //设置标题字体     
     chart.getTitle().setFont(new Font("隶书",Font.BOLD, 25));       
     //设置图例类别字体       
     chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));    
     //设置背景色     
     chart.setBackgroundPaint(new Color(160,214,248));     
     //获取绘图区对象    
     CategoryPlot plot = chart.getCategoryPlot(); 
     try {
     //------得到chart的保存路径---- 
     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
     filename = ServletUtilities.saveChartAsJPEG(chart, w, h, info,session);
     //------使用printWriter将文件写出----
     ChartUtilities.writeImageMap(pw, filename, info, true);
     pw.flush();
     pw.close();
    } catch (IOException e) {
     // TODO 自动生成 catch 块
     e.printStackTrace();
    }
     fname=request.getContextPath() + "/servlet/DisplayChart?filename="+filename ; 
    return fname;
   } 
}