`
xiangqian0505
  • 浏览: 317445 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jfreechart 折线图

    博客分类:
  • java
阅读更多
package com.ssrt.group;

import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

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.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

/**
 * 项目名称:fit 
 * 类名称:CreatePicByJFreeChart 
 * 类描述:生成走势图的处理类 
 * 创建时间:Mar 15, 2010 10:15:22 AM
 * @version
 */
public class CreatePicByJFreeChart {

 /**
  * 功能:根据传入的数据生成指定目录的走势图的处理方法。
  * @param List list 生成图所需要的list集合
  * @param String CateGory X轴对应的字段
  * @param String value Y轴对应的字段
  * @param String series 底部显示的标题
  * @param int width 生成图片的宽
  * @param int height 生成图片的高
  * @param HttpServletRequest request 当前的request
  * @param String picDir 要生成图片存储的目录,默认为images
  * @return String 返回生成图片的全路径和名称
  */
 @SuppressWarnings( { "unchecked", "deprecation" })
 public static String createXYLinePic(List list, String CateGory,String value, String series, int width, int height,HttpServletRequest request, String picDir) {
  try {
   Method metd = null;
   String fdname = null;
   String seriesTemp = series;
   DefaultCategoryDataset linedataset = new DefaultCategoryDataset();

   // 遍历集合
   for (Object object : list) {
    // 获取集合中的对象类型
    Class clazz = object.getClass();
    // 获取他的字段数组
    Field[] fds = clazz.getDeclaredFields();
    Object f1 = null;
    Object f2 = null;
    Object objTitle = null;
    // 遍历该数组Field field : fds
    for (Field field : fds) {
     // 得到字段名
     fdname = field.getName();
     // 对象序列化常量没有set和get方法。
     if (!fdname.equals("serialVersionUID")) {
      // 根据字段名找到对应的get方法,null表示无参数
      metd = clazz.getMethod("get" + change(fdname), null);
     }
     // 比较是否在字段数组中存在name字段,如果不存在短路,如果存在继续判断该字段的get方法是否存在,同时存在继续执行
     if (CateGory.equals(fdname) && metd != null) {
      // 调用该字段的get方法
      f1 = metd.invoke(object, null);
     }
     // 同上
     if (value.equals(fdname) && metd != null) {
      f2 = metd.invoke(object, null);
     }
     if (fdname.equals(series)) {
      objTitle = metd.invoke(object, null);
      seriesTemp = objTitle.toString();
     }
    }

    linedataset.addValue(Double.parseDouble(f2.toString()),seriesTemp, f1.toString());
   }
   // 定义图表对象
   JFreeChart jfreechart = ChartFactory.createLineChart("", "", "",linedataset, PlotOrientation.VERTICAL, true, true, false);
   CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot();
   // 获得renderer 注意这里是下嗍造型到lineandshaperenderer!!
   LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot.getRenderer();
   
   categoryplot.setBackgroundPaint(Color.lightGray);
   // 设置网格线的颜色
   categoryplot.setRangeGridlinePaint(Color.black);
   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));   
   //这句代码解决了底部汉字乱码的问题 
   jfreechart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));  
   numberaxis.setAutoRangeIncludesZero(true);
   // series 点(即数据点)可见
   lineandshaperenderer.setShapesVisible(true);
   // 定义series为”First”的(即series1)点之间的连线 ,这里是虚线,默认是直线
   // lineandshaperenderer.setSeriesStroke(0, new BasicStroke(2.0F, 1,1, 1.0F, new float[] {10F, 6F }, 0.0F));
   
   //判断目录
   String dir = "";
   if(!"".equals(picDir) && picDir != null){
    dir = request.getSession().getServletContext().getRealPath("/"+picDir);
    File file = new File(dir);
    if(!file.exists()){
     file.mkdir();
    }
   }
   //目录如果不指定时,则默认目录为Images
   else {
    dir = request.getSession().getServletContext().getRealPath("/"+"images");
   }
   String picPathName = dir+"/"+"pic.jpg";
   ChartUtilities.saveChartAsJPEG(new File(picPathName), jfreechart,width, height);
   return picPathName;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }
 










 

 

/**
  * 功能:根据传入的数据生成指定目录的饼图的处理方法。
  * @param List list 生成图所需要的list集合
  * @param String CateGory 标题对应的字段
  * @param String value 数据对应的字段
  * @param int width 生成图片的宽
  * @param int height 生成图片的高
  * @param HttpServletRequest request 当前的request
  * @param String picDir 要生成图片存储的目录,默认为images
  * @return String 返回生成图片的全路径和名称
  */
 @SuppressWarnings("unchecked")
 public static String createPIEPic(List list, String CateGory,String value, int width, int height,HttpServletRequest request, String picDir) {
  try {
   Method metd = null;
   String fdname = null;
   DefaultPieDataset ds = new DefaultPieDataset();
   // 遍历集合
   for (Object object : list) {
    // 获取集合中的对象类型
    Class clazz = object.getClass();
    // 获取他的字段数组
    Field[] fds = clazz.getDeclaredFields();
    Object f1 = null;
    Object f2 = null;
    @SuppressWarnings("unused")
    Object objTitle = null;
    // 遍历该数组Field field : fds
    for (Field field : fds) {
     // 得到字段名
     fdname = field.getName();
     // 对象序列化常量没有set和get方法。
     if (!fdname.equals("serialVersionUID")) {
      // 根据字段名找到对应的get方法,null表示无参数
      metd = clazz.getMethod("get" + change(fdname), null);
     }
     // 比较是否在字段数组中存在name字段,如果不存在短路,如果存在继续判断该字段的get方法是否存在,同时存在继续执行
     if (CateGory.equals(fdname) && metd != null) {
      // 调用该字段的get方法
      f1 = metd.invoke(object, null);
     }
     // 同上
     if (value.equals(fdname) && metd != null) {
      f2 = metd.invoke(object, null);
     }
     
    }
    ds.setValue(f1.toString(),Double.parseDouble(f2.toString()) );
   }
   //判断目录
   String dir = "";
   if(!"".equals(picDir) && picDir != null){
    dir = request.getSession().getServletContext().getRealPath("/"+picDir);
    File file = new File(dir);
    if(!file.exists()){
     file.mkdir();
    }
   }
   //目录如果不指定时,则默认目录为Images
   else {
    dir = request.getSession().getServletContext().getRealPath("/"+"images");
   }
   String picPathName = dir+"/"+"pic.jpg";
   JFreeChart jfc = ChartFactory.createPieChart3D("", ds, true, false, false); 
   //通过JFreeChart 对象获得 
   PiePlot pieplot = (PiePlot) jfc.getPlot(); 
   // 没有数据的时候显示的内容 
   pieplot.setNoDataMessage("无数据可供显示!"); 
   
   /* 解决底部和图上文字乱码问题 start*/
   jfc.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 14)); 
      pieplot.setLabelFont(new   Font("宋体",   Font.BOLD,   10));
      /* 解决底部和图上文字乱码问题 end*/
      pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator(("{0}({2})"), NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));
   ChartUtilities.saveChartAsJPEG(new File(picPathName), jfc, width,height);
   
   return picPathName;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }
  
 /**
  * 功能:将传入的字符串的第一个字母转换为大写的处理方法
  * @param String src 源字符串
  * @return String 
  */
 public static String change(String src) {
  if (src != null) {
   StringBuffer sb = new StringBuffer(src);
   sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
   return sb.toString();
  } else {
   return null;
  }
 }
}

 

分享到:
评论
2 楼 xiangqian0505 2011-12-06  
hllf123 写道
如果折线图上拐点显示数据会出现逗号 也就是:48,580  怎么去掉这个逗号呢
你能说详细些吗?
1 楼 hllf123 2011-12-06  
如果折线图上拐点显示数据会出现逗号 也就是:48,580  怎么去掉这个逗号呢

相关推荐

Global site tag (gtag.js) - Google Analytics