`
xiangqian0505
  • 浏览: 321608 次
  • 性别: 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  怎么去掉这个逗号呢

相关推荐

    jfreechart 折线图的一个例子

    **JFreeChart 折线图实例详解** JFreeChart 是一个强大的 Java 图形库,它提供了丰富的图表类型,包括折线图、柱状图、饼图等,适用于各种数据分析和展示场景。在这个例子中,我们将深入探讨如何使用 JFreeChart ...

    jfreechart折线图demo

    在这个“jfreechart折线图demo”中,我们将深入探讨如何使用 JFreeChart 创建和展示折线图。 1. **JFreeChart 概述** JFreeChart 提供了一套完整的 API,使得开发者可以方便地生成高质量的静态图表,并能轻松地将...

    jfreechart 折线图 应用

    该程序为main 函数,定义了三个方法,分别是jfreechart三种实现折线图的类型,返回的是一个chart 本程序是把图片保存到本地,当然实际应用中,只要在程序和页面中做相关配置即可以使用。 因为图片带点透明,所以...

    jfreechart折线图读取数据库数据的显示(mysql)

    在Java编程环境中,JFreeChart库是一个非常强大的工具,用于创建各种类型的图表,包括折线图、柱状图、饼图等。本教程将详细讲解如何利用JFreeChart结合MySQL数据库来生成动态折线图,展示数据库中的数据。 首先,...

    jfreechart折线图.zip

    ValueStack vs=(ValueStack)request.getAttribute("struts.valueStack"); List list=(List)vs.findValue("list"); Iterator itor=list.iterator(); while(itor.hasNext()) { ... <%} %>

    jfreechart 漂亮的折线图

    利用jfreechart绘制的漂亮的折线图,实现双纵坐标,折线点标签还带箭头指示,非常直观,需要提前下载jfreechart.jar文件,否则我的类会报错,也即是要配置运行环境

    JFreeChart 折线、柱状组合图

    public JFreeChart createChart(String Ytitle, String title, CategoryDataset lineData, CategoryDataset barData) { //参考附件 return chart; } //struts 部分 <!--begin 维优特例 --> ...

    JSP利用JFreeChart生成折线图

    在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而JFreeChart则是一个强大的Java图表库,能够帮助开发者生成各种复杂的图表,包括折线图。本教程将详细介绍如何在JSP中利用JFreeChart库来...

    jfreechart 堆栈柱状图跟折线图结合拼接

    jfreechart 堆栈柱状图跟折线图结合拼接 jar包请戳http://download.csdn.net/detail/a156435646/7424707

    JFreeChart折线图的生成方法

    JFreeChart折线图的生成方法 JFreeChart是一款功能强大且广泛使用的图表类库,它可以生成多种类型的图表,如饼图、柱状图、散点图、时序图、甘特图等等。今天,我们将详细介绍JFreeChart折线图的生成方法。 首先,...

    JFreeChart饼图、折线图等资料学习

    JFreeChart是一款强大的Java图形库,它允许开发者创建多种类型的图表,包括饼图、折线图、柱状图、散点图以及更多其他类型的图表。这个资料包包含了JFreeChart的核心库(jfreechart-1.0.16.jar)和其依赖库JCommon...

    JFreeChart双Y轴折线图实例,可以直接运行

    JFreeChart双Y轴折线图实例,可以直接运行,实例类为LineChartDemo1.JAVA,有注释。 若想在web工程使用只需如下。 String filename = ServletUtilities.saveChartAsPNG(jfreechart, 600, 400, null, session); ...

    jfreechart 折线图、饼状图、柱状图

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的图表,包括折线图、饼状图和柱状图等,这些图表广泛应用于数据分析、报表展示以及Web应用程序中。本项目提供了一个实例,展示了如何在Web页面上使用...

    jfreechart根据24小时数据画折线图

    ### jfreechart根据24小时数据画折线图 #### 一、jfreechart简介 jfreechart是一款基于Java的开源图表绘制库,它能够帮助开发者轻松地在应用程序中生成各种图表,包括折线图、饼图、柱状图等。它的主要优势在于...

    jfreechart绘制折线图(平面和3D)

    JFreeChart是一款强大的Java图形库,它允许开发者创建多种类型的图表,包括折线图、柱状图、饼图、散点图等。在本主题中,我们将深入探讨如何使用JFreeChart来绘制平面和3D的折线图。 首先,让我们了解折线图的基本...

    jfreechart 生成折线图,饼图,柱状图,堆栈柱状图

    JFreeChart 是一个开源的Java库,用于生成高质量的2D图表,如折线图、饼图、柱状图和堆栈柱状图等。它广泛应用于数据分析、报告和应用程序中,提供丰富的自定义选项来满足各种视觉需求。在本项目中,你将找到能够...

    java JXL导入导出Excel源码及jfreechart 生成折线图,饼图

    java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图

    JFreeChart 让X轴的标题竖着显示

    在Java编程环境中,JFreeChart库是一个非常强大的工具,用于创建各种类型的图表,如柱状图、饼图、线图等。如果你需要让X轴的标题在图表中竖直显示,而不是默认的水平显示,这通常是为了更好地适应有限的空间或者...

    jfreechart绘制的风速风向玫瑰图

    jfreechart是Java中一个流行的图表库,它提供了许多种类的图表,包括柱状图、折线图、饼图、雷达图等。本文主要介绍如何使用jfreechart绘制风速风向玫瑰图。 首先,了解jfreechart的基本结构。jfreechart的核心是...

Global site tag (gtag.js) - Google Analytics