`
香飘飘2011
  • 浏览: 84257 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

jfreechart的使用-柱状图

阅读更多

读取数据库中的数据,构造成柱状图,并将图片以文件输出流的形式保存到本地电脑中:

 

package net.test;

import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.nk.core.entitysupport.POJO;
import net.nk.entity.DataAttr;
import net.nk.entity.DataAttrQueryTemp;
import net.nk.entity.DataStatModel;
import net.nk.entity.SmDepartment;
import net.nk.enums.data.DataAttrSpecialDeal;
import net.nk.oms.common.Parameters;
import net.nk.service.data.iface.ServiceDataAttr;
import net.nk.service.sm.iface.ServiceSmDepartment;
import net.nk.util.cm.CmItemQuery;
import net.nk.util.cm.ICMConnectionPool;
import net.test.core.BusinessTestCase;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.TextAnchor;

import com.ibm.icu.impl.IntTrie;
import com.ibm.mm.sdk.common.DKConstant;
import com.ibm.mm.sdk.common.DKDDO;
import com.ibm.mm.sdk.server.DKDatastoreICM;
import com.sun.java_cup.internal.internal_error;

/**
 * @author xiaoye
 * @version create time:Aug 22, 2011 10:55:41 AM
 * 类说明
 */
public class TestJfreeChart extends BusinessTestCase {
 private static final String CHART_PATH = "E:/test/";
 /**
  * (方法说明)
  * @param (参数说明)
  * @return void
  * @throws Exception
  * @throws Exception
  */
 public void test() throws Exception {
  DataStatModel model = new DataStatModel();
  model.setSmName("dd.png");
  model.setSmX("attrGroup_public.attr_data_dept");
  model.setSmY("SYSPUBAG.SYSFILESIZE");
  model.setSmXName("数据所属科室");
  model.setSmYName("文件大小");
  model.setSmStatDataTypeID("dt_tool_pro");
  ServiceDataAttr  serviceDataAttrImpl = (ServiceDataAttr) this.getBean("serviceDataAttrImpl");
  ServiceSmDepartment serviceSmDepartmentImpl = (ServiceSmDepartment) this.getBean("serviceSmDepartmentImpl");
   beginSet(model,"char",serviceDataAttrImpl,serviceSmDepartmentImpl);
 }
 //开始
 private void beginSet(DataStatModel stateModel,String xType,ServiceDataAttr  serviceDataAttrImpl,ServiceSmDepartment serviceSmDepartmentImpl) throws Exception{
  String xAttrId = stateModel.getSmX(); //X轴属性
  String yAttrId = stateModel.getSmY(); //Y轴属性
  String xName = stateModel.getSmXName();//X轴名称
  String yName = stateModel.getSmYName();//Y轴名称
  String charName = stateModel.getSmName(); //图片标题和图片名称
  String itemType = stateModel.getSmStatDataTypeID();
  List<String> itemTypeList = Arrays.asList(itemType.split(","));
  CmItemQuery itemQuery = new CmItemQuery();
  String hql = itemQuery.querypubItemsList(itemTypeList, new ArrayList<DataAttrQueryTemp>());
   DKDatastoreICM dsICM = null;//CM连接
  try{
   //从CM中查找出相应的数据ddo对象
   dsICM = ICMConnectionPool.getConnection(ICMConnectionPool.CMUSER, ICMConnectionPool.CMPW);
   List<DKDDO> ddos = CmItemQuery.queryResults(hql.toString(),dsICM,true);
   DefaultCategoryDataset dataset = getData(ddos,xAttrId,yAttrId,xType,serviceDataAttrImpl,serviceSmDepartmentImpl);
   //构造柱状图
   createBarSet(dataset,xName,yName,charName);
  }catch(Exception e){
   e.printStackTrace();
   throw e;
  }finally {
   if (dsICM != null)ICMConnectionPool.returnConnection(dsICM);
  }
 }
 //构造柱状图
 private void createBarSet(DefaultCategoryDataset dataset, String xName,
   String yName, String charName) {
   JFreeChart chart = ChartFactory.createBarChart3D(
     charName, // 图表标题
     xName, // 目录轴的显示标签
     yName, // 数值轴的显示标签
                 dataset, // 数据集
                 PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                 true,  // 是否显示图例(对于简单的柱状图必须是false)
                 true,  // 是否生成工具
                 false  // 是否生成URL链接
                 );
  CategoryPlot plot = chart.getCategoryPlot();//获得图表区域对象
  //设置图表的纵轴和横轴
  CategoryAxis domainAxis = plot.getDomainAxis();
  domainAxis.setLowerMargin(0.1);//设置距离图片左端距离此时为10%
  domainAxis.setUpperMargin(0.1);//设置距离图片右端距离此时为百分之10
  //顶部标题
  //Font font=new Font("宋体",Font.BOLD,16);
  //TextTitle title=new TextTitle("招生信息总览",font);
  //chart.setTitle(title);
  chart.getTitle().setFont(new Font("宋体",Font.BOLD,16));
  //水平底部列表
  domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14));
  //水平底部标题
  domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));
  //设定柱子的属性
  NumberAxis rangeAxis = (NumberAxis)plot.getRangeAxis();
  rangeAxis.setUpperMargin(0.1);//设置最高的一个柱与图片顶端的距离(最高柱的10%)
  //垂直标题
  rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));
  rangeAxis.setAutoTickUnitSelection(true);
  //rangeAxis.setTickUnit(new NumberTickUnit(1));
  //设置纵横坐标的显示位置
  plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);//显示在下端(柱子竖直)或左侧(柱子水平)
  plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT); //数显示在下端(柱子水平)或左侧(柱子竖直)
  //底部柱图说明
  chart.getLegend().setItemFont(new Font("宋体",Font.PLAIN,12));
  //柱图顶部数值显示
  BarRenderer3D renderer = new BarRenderer3D();
  renderer.setBaseItemLabelGenerator(new  StandardCategoryItemLabelGenerator());
  renderer.setBaseItemLabelFont(new Font("黑体",Font.PLAIN,13));
  renderer.setBaseItemLabelsVisible(true);
  //设置柱图最大宽度
  renderer.setMaximumBarWidth(0.1);
  //设定柱图数值显示位置
  renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER));
  /*在指定的柱状图上显示数值
  renderer.setSeriesItemLabelGenerator(1, new  StandardCategoryItemLabelGenerator());
  renderer.setSeriesItemLabelFont(1, new Font("黑体",Font.PLAIN,9));
  renderer.setSeriesItemLabelsVisible(1, true);*/
  plot.setRenderer(renderer);

  FileOutputStream fos_jpg = null;
  try {
   isChartPathExist(CHART_PATH);
   String chartName = CHART_PATH + charName;
   fos_jpg = new FileOutputStream(chartName);
   ChartUtilities.writeChartAsPNG(fos_jpg, chart, 600, 500, true, 10);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try  {
    fos_jpg.close();
   }  catch (Exception e)  {
    e.printStackTrace();
   }
  }
 }
 /**
 * 判断文件夹是否存在,如果不存在则新建
 * @param chartPath
 */
 private void isChartPathExist(String chartPath) {
  File file = new File(chartPath);
  if (!file.exists()) {
   file.mkdirs();
  // log.info("CHART_PATH="+CHART_PATH+"create.");
  }
 }
 //构造数据集
 private DefaultCategoryDataset getData(List<DKDDO> ddos,String xID,String yID,String xType,ServiceDataAttr  serviceDataAttrImpl,ServiceSmDepartment serviceSmDepartmentImpl) throws Exception {
  DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  Map<String, DataAttr> dataAttrMap = new HashMap<String, DataAttr>();
  Map<String, Object> dataMap = new HashMap<String, Object>();
  String xVal = "";
  Object yVal ;
  DKDDO ddo ;
  short xDataId;
  short yDataId;
  String xTempId="";
  try{
   //如果是字符类型
   if("char".equals(xType)){
    List<POJO> dataAttrList = serviceDataAttrImpl.findAll();
    for(POJO pojo:dataAttrList){
     DataAttr attr = (DataAttr) pojo;
     dataAttrMap.put(attr.getAttrId(), attr);
    }
    for(int i=0;i<ddos.size();i++){
      ddo = ddos.get(i);
      xDataId = ddo.dataId(DKConstant.DK_CM_NAMESPACE_ATTR,xID);
      if(xID.indexOf(Parameters.AGM_SELECTION_4JAVA) != -1){
       xTempId = xID.split(Parameters.GROUP_DECOLATOR)[1];
      }else{
       xTempId = xID;
      }
     if(dataAttrMap.containsKey(xTempId)){
      DataAttr xAttr = dataAttrMap.get(xTempId);
      if(xDataId > 0){
       Object val = ddo.getData(xDataId);
       if(val != null){
        //如果是部门科室特殊属性
        if(DataAttrSpecialDeal.department.getCode().equals(xAttr.getSpecial())){
         SmDepartment smDepartment = serviceSmDepartmentImpl.findSmDepartmentByPrimaryId(val.toString());
         if(smDepartment!=null){
          xVal = smDepartment.getDepName();
         }else{
          xVal = ddo.getData(xDataId).toString();
         }
        }
       }
      }
     }
     //如果Y轴统计的为文件大小,直接读取属性值
     if(Parameters.SYSTEM_PUB_AG_FILESIZE.equals(yID)){
      yDataId = ddo.dataId(DKConstant.DK_CM_NAMESPACE_ATTR,yID);
      if(yDataId > 0){
       Object val = ddo.getData(yDataId);
       if(val !=null){
        yVal = (Double) val/(1024*1024);  //化为MB
       }else{
        yVal = (double)0;
       }
       if(dataMap.containsKey(xVal)){
        dataMap.put(xVal, (Double)yVal+(Double)dataMap.get(xVal));
       }else{
        dataMap.put(xVal, (Double)yVal);
       }
      }
     }
    }
   }
   if(dataMap.size() < 1){
    dataset.setValue((Number)0,"数据","无数据");
   }else{
    Set<String> keySet = dataMap.keySet();
    for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
     String key = (String) iterator.next();
     Object value = dataMap.get(key);
     dataset.setValue((Double)value , "数据",key);
    }
   }
  }catch(Exception e){
   e.printStackTrace();
   throw e;
  }
        return dataset;
    }
 
 
}

分享到:
评论

相关推荐

    JFreeChart画图 饼状图 单组柱状图 多组柱状图 堆积柱状图 折线图

    JFreeChart 饼状图 柱状图 柱状图 堆积柱状图 折线图 这个是我特地开发的一个用JFreeChart开发的用来画图的项目,已经开发成形了各种项目的各种需求的项目,并且自己可以拓展,根据需求修改代码,完成项目的需要。 ...

    JFreeChart动态加载柱状图

    JFreeChart创建柱状图,之前网上很多都是创建柱状图的,静态的。数据更新之后柱状图随之改变,代码实现详见附件代码。所需要的jar包是jfreechart-1.0.13.jar,gnujaxp.jar,jcommon-1.0.16.jar

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

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

    jfreechart1.0.3-demo-src

    JFreeChart 是一个广泛使用的 Java 图形库,它提供了丰富的图表类型,包括饼图、柱状图、线图、散点图等,使得开发者能够在 Java 应用程序中方便地创建高质量的图表。"jfreechart1.0.3-demo-src" 是 JFreeChart ...

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

    JFreeChart是一个流行的Java库,用于生成各种类型的图表,包括折线图、饼图和柱状图,甚至堆栈柱状图。这个压缩包中的"CreateChartServiceImpl.java"文件很可能包含了一个实现这些功能的服务类。 首先,我们要理解...

    jfreechart,jfreechart-1.0.13,jfreechart-1.0.13,jfreechart

    JFreeChart是Java中最优秀的绘图工具之一,它支持多种图表类型,包括折线图、柱状图、饼图、散点图、甘特图以及复杂的组合图等。这些图表不仅适用于数据展示,还可以用于数据分析和报告生成,广泛应用于金融、科学、...

    JFreeChart 折线、柱状组合图

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

    jfreechart 绘制横向立体柱状图

    利用jfreechart绘制的横向立体柱状图,横坐标是数值,纵坐标是数据分类,需要提前引入jfreechart包文件到工程里,才不会报错

    利用JFreeChart 实现柱状图,饼图,时序图,折线图等

    然后,使用`JFreeChart.createBarChart()`方法生成柱状图。 2. **饼图(Pie Chart)** 饼图用于显示整体中各个部分的比例。JFreeChart提供了`PieDataset`接口,用来存储数据,然后通过`JFreeChart.createPieChart...

    Jfreechart--demo

    JFreeChart是一款广泛使用的开源Java库,它能够帮助开发者创建各种高质量的图表,包括柱状图、饼图、线形图、散点图、面积图、甘特图以及更复杂的组合图表等。在Java应用程序、Web应用和报告系统中,JFreeChart经常...

    jfreechart-1.0.19

    这个库提供了广泛的数据可视化功能,包括折线图、柱状图、饼图、散点图、甘特图以及更多其他类型,使得开发者无需深入了解图形编程细节就能轻松地生成高质量的图表。 **主要特性** 1. **多类型图表**:JFreeChart ...

    jfreechart-1.0.14-demo.jar 对应的源码

    JFreeChart 是一个广泛使用的 Java 图表库,它为开发者提供了创建各种高质量图表的能力,包括饼图、柱状图、线图、散点图、甘特图等。在1.0.14版本中,其提供的`jfreechart-1.0.14-demo.jar`是一个演示程序,展示了...

    jfreechart-1.0.6-demo源码

    JFreeChart是一款流行的开源Java图表库,它提供了一系列丰富的图表类型,包括折线图、柱状图、饼图、散点图等,广泛应用于数据分析、报表生成以及GUI应用的可视化展示。在本文中,我们将深入探讨"jfreechart-1.0.6-...

    jfreechart实现柱状图排序

    根据提供的信息,我们可以总结出以下关于使用 JFreeChart 实现柱状图排序的相关知识点: ### 一、背景介绍 在日常的数据分析与展示工作中,柱状图是非常常见的一种图表类型,它能直观地显示不同类别之间的数值差异...

    jfreeChart---DEMO

    JFreeChart是一个流行的开源Java库,它提供了丰富的图表类型,包括折线图、柱状图、饼图、散点图等,用于生成高质量的2D图表。在本示例中,我们关注的是"jfreechart的折线图demo",它演示了如何通过Servlet封装数据...

    java+jfreechart+struts 生成柱状图

    java+jfreechart+struts 生成柱状图 java jfreechart 柱状图 java jfreechart 柱状图 谁需要完整项目可以去http://download.csdn.net/source/2665347

    jfreechart--类说明

    JFreeChart 是一个开源的Java库,用于生成高质量的图表,包括饼图、柱状图、线图、散点图、甘特图等。这个库广泛应用于数据分析、报告生成、Web应用以及各种需要可视化的Java项目中。在“jfreechart--类说明”中,...

    jfreechart---lib.zip

    JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,可直接输出成图片文件,亦可被导出PDF或Excel文档。

Global site tag (gtag.js) - Google Analytics