`
wj131
  • 浏览: 142240 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

jfreechart简单柱状图应用

阅读更多

直接是在jsp页面操作。代码写的有点乱:

<%@ page language="java"
      import="java.io.*,
        java.awt.*,
        java.sql.*,
        java.text.*,
        java.util.*,
      org.jfree.data.*,
      org.jfree.chart.*,
      org.jfree.chart.plot.CategoryPlot,
      org.jfree.chart.axis.ValueAxis,
      org.jfree.chart.plot.CategoryPlot,
      org.jfree.chart.plot.PlotOrientation,
      org.jfree.data.category.CategoryDataset,
      org.jfree.chart.title.TextTitle,
      org.jfree.chart.plot.PlotOrientation,
      org.jfree.data.general.DatasetUtilities,
      org.jfree.chart.plot.CategoryPlot,
      org.jfree.chart.renderer.category.BarRenderer3D,
      org.jfree.chart.axis.CategoryAxis"
       pageEncoding="GB2312"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
if(request.getParameter("viewSubmit")!=null)
{
%>
<jsp:useBeanid ="db" scope="page" class="hnccbean.DBConnection"/>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
    <base href="<%=basePath%>">
    <title>view_report</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">

  </head>
  <%
  long ACDCALLS=0;
  long ABNCALLS=0;
  long PERCENT_SERV_LVL_SPL=0;
  long TI_AUXOTHERTIME=0;
  long AVG_ABANDON_TIME=0;
  long I_ACWTIME=0;
  long AVG_ANSWER_SPEED=0;
  long AVG_TALK_TIME_IN=0;
  float r1=0.00f;
  float r2=0.00f;
  float r3=0.00f;
  long tqqzl=0;
  long tjtzl=0;
  long tfqzl=0;
  long tydzl=0;
  
  String strwhere=new String("");
  String startDate = request.getParameter("start_date");//开始日期
  String endDate = request.getParameter("end_date");//截止日期
  String shour = request.getParameter("shour");
  String ehour = request.getParameter("ehour");
  String type = request.getParameter("type");//技能组类型
  String hour = request.getParameter("hour");//选择特定时间
     
     if(startDate!=null)
   strwhere = " and convert(varchar,a.STARTTIME,112)>='"+startDate+"'";
  if(endDate!=null)
   strwhere += " and convert(varchar,a.STARTTIME,112)<='"+endDate+"'";

     if(hour !=null && !"".equals(hour)){
    strwhere += " and convert(int,convert(char(2),a.STARTTIME,108))="+Integer.parseInt(hour)+"";
   }
  if(type!=null){
   if(type.equals("00")!=true){
    strwhere += " and a.SPLIT='"+type+"'";
   }
  }
  String splitName = "";
  if (type.equals("00")==true) {
   splitName = "全部技能组";
  }
  if (type.equals("11")==true) {
   splitName = "世界风VIP";
  }
  if (type.equals("12")==true) {
   splitName = "世界风普通";
  }
  if (type.equals("14")==true) {
   splitName = "UP新势力";
  }
  if (type.equals("15")==true) {
   splitName = "如意通";
  }
  if (type.equals("16")==true) {
   splitName = "其它";
  }
  if (type.equals("20")==true) {
   splitName = "投诉组";
  }
  if (type.equals("34")==true) {
   splitName = "3G专席";
  }
  if (type.equals("32")==true) {
   splitName = "固网专席";
  }
     java.text.DecimalFormat  df  =new  java.text.DecimalFormat("0.00");
      JFreeChart chart = null;
  
   String[] rowKeys = new String[]{"呼入量","接通量"};
     SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
  int days = 0;
  GregorianCalendar calender = new GregorianCalendar();
        String[] columnKeys =null;
  double[][] data = null;
  try {
          java.util.Date date1 = format.parse(startDate);
         java.util.Date date2 = format.parse(endDate);

         calender.setTime(date1);

         days = (int) ((date2.getTime() - date1.getTime()) / 86400000);
               
   if((hour ==null ||"".equals(hour))&& days==0){
          columnKeys = new String[]    {"00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23"};
          data = new double[2][24];
    }else{
       columnKeys = new String[days+1];
       data = new double[2][days+1];
    }
   
   columnKeys[0] = startDate.substring(4);
   for (int i = 1; i <= days; i++) {
    calender.add(5, 1);
    columnKeys[i]=format.format(calender.getTime()).substring(4);
           }
  
  
  
      String query = "";
   Statement st = db.getStatement();
   if((hour ==null || "".equals(hour))&& days==0){//24个小时都查询出来
    query = "select convert(char(2),a.STARTTIME,108) htime,sum(b.incalls),sum(a.ACDCALLS)from hsplit a,rpt_vdn_incalls b where a.SPLIT=b.split and a.ACDCALLS>0 and a.STARTTIME=b.starttime and a.SPLIT in ('11','12','14','15','16','20','28','32','34') ";   
   query=query+strwhere + "group by convert(char(2),a.STARTTIME,108) order by htime";
    }else{//起始日期和截止日期之间每天的某个小时
        query = "select convert(varchar,a.STARTTIME,112) sdate,sum(b.incalls),sum(a.ACDCALLS)from hsplit a,rpt_vdn_incalls b where a.SPLIT=b.split and a.ACDCALLS>0 and convert(varchar,a.STARTTIME,112)=convert(varchar,b.starttime,112) and  convert(int,convert(char(2),a.STARTTIME,108))= convert(int,convert(char(2),b.starttime,108)) and  a.SPLIT in ('11','12','14','15','16','20','28','32','34') ";   
     query=query+strwhere + " group by convert(varchar,a.STARTTIME,112) order by sdate";

    }
   //out.println(query + "<br>");
   ResultSet rs =null;
   try {
    rs = st.executeQuery(query);
    int count = 0;
    while(rs.next()) {
     for (int n=0 ; n<columnKeys.length ; n++) {
      if (columnKeys[n].equals(rs.getString(1).substring(4)) == true) {
       data[0][n] = new Integer(rs.getString(2)).doubleValue();
       data[1][n] = new Integer(rs.getString(3)).doubleValue();
       continue;
      }
     }
    }
    
   } catch (SQLException e) {
    out.println("组合出错了");
    // TODO Auto-generated catch block
    e.printStackTrace();
   }finally{
       if(rs !=null)
       rs.close();
    if(st !=null)
    st.close();
    if(db !=null)
      db.close();
   }
  

 

//-----------------以上都是准备数据。这个数据是从数据库里面取的

 

//得到数据集
  CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
    rowKeys, columnKeys, data);

//得到图形对象:ChartFactory.createBarChart3D(,,,,,,,);里面的内容依次表示:图形标题;目录轴的显示标签,数值轴的显示标签,数据集,图标方向,是否显示图例(对于简单的柱状图必须是false),是否生成工具,是否生成URL链接
  chart = ChartFactory.createBarChart3D(splitName + "话务量统计", "时间", "话务量", dataset,
    PlotOrientation.VERTICAL, true, false, false);

 

//获得图标区域对象
  CategoryPlot plot = chart.getCategoryPlot();

 

//获得X轴对象
  CategoryAxis domainAxis = plot.getDomainAxis();

 

//获取图标区域样式对象
  BarRenderer3D renderer = new BarRenderer3D();

 

//Y轴对象
  ValueAxis rAxis = plot.getRangeAxis();

 

//显示字体渲染,使显示字体内容不模糊,最好把字体设置在12以上
    chart.getRenderingHints().put(
              RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF
              );


      /*----------设置标题字体--------------------------*/
      TextTitle textTitle = chart.getTitle();
      textTitle.setFont(new Font("黑体", Font.PLAIN, 20));      
      /*------设置X轴坐标上的文字-----------*/
      domainAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN,11));
      /*------设置X轴的标题文字------------*/
      domainAxis.setLabelFont(new Font("宋体",Font.PLAIN,12));       
      /*------设置Y轴坐标上的文字-----------*/
      rAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN,12));
      /*------设置Y轴的标题文字------------*/
      rAxis.setLabelFont(new Font("黑体",Font.PLAIN,12));

 

      //解决X轴下方字体乱码
      chart.getLegend().setItemFont(new Font("宋体",Font.PLAIN,12));    
       renderer.setItemMargin(0.0);
    //显示每个柱的数值,并修改该数值的字体属性(如果柱体太窄了的话。数值是现实不出来的)
     renderer.setItemLabelGenerator(new org.jfree.chart.labels.StandardCategoryItemLabelGenerator());
     renderer.setItemLabelFont(new Font("黑体",Font.BOLD,12));//12号黑体加粗
     renderer.setItemLabelPaint(java.awt.Color.black);//字体为黑色
     renderer.setItemLabelsVisible(true);

   //把图像区域样式注入到图形区域对象中区
     plot.setRenderer(renderer);
  
   %>
  <body>
 
 
 
  <%
  try
        { 
            int  width=600;   
   if(days >7 && days<=10){
    width =800;
   }
   if(days>10){
    width=900;
   }

//输出
   ChartUtilities.writeChartAsJPEG(response.getOutputStream(), chart, width, 480);
   response.getOutputStream().flush();
   response.getOutputStream().close();
   out.clear(); 
   out = pageContext.pushBody(); 
       }
     catch (Exception e)
        {
    out.println("输出出错了");
         e.printStackTrace();
    }
   
  } catch (Exception e) {
             out.println("最外面出错了");
   e.printStackTrace();
  }
  
 
 }
   %>
  
   <input type="button" value="back">
  </body>
</html>

  • 大小: 59.1 KB
分享到:
评论

相关推荐

    jfreechart实现柱状图排序

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

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

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

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

    在Java编程环境中,JFreeChart库是一个非常强大的工具,它允许开发者轻松地创建各种图表,如柱状图、饼图、时序图和折线图等。这些图表在数据分析、报表展示以及各种可视化应用中非常常见。下面我们将详细介绍如何...

    java里用JFreeChart画柱状图、折线图、雷达图

    柱状图是一种常见的统计图表,通过矩形的长度或高度来表示分类变量的频数或数值变量的大小。在JFreeChart中,开发者可以使用`CategoryDataset`来存储数据,然后利用`JFreeChart`类的`createBarChart()`方法创建图表...

    JfreeChart柱状图饼图

    总之,JFreeChart是Java开发中不可或缺的图表库,无论你是要创建简单的柱状图还是复杂的饼图,都能找到合适的方法。通过对源码的学习,我们不仅可以定制图表,还能深入理解图形绘制的底层逻辑,从而提升开发效率和...

    JFreeChart生成3D饼状图及柱状图

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的2D和3D图表,包括折线图、柱状图、饼状图、散点图等,并且支持自定义样式和颜色,使得数据可视化变得更加直观和生动。在这个特定的场景中,我们将关注...

    java制作jfreechart柱状图 饼状图 折线图

    Java中的JFreeChart库是一个强大的工具,用于生成各种类型的图表,包括柱状图、饼状图和折线图。在本教程中,我们将深入探讨如何使用JFreeChart创建这些图表,以及如何用随机生成的数据作为数据源。 首先,...

    jfreechart柱状图

    JFreeChart 是一个流行的开源 Java 图形库,它提供了丰富的图表类型,包括柱状图、饼图、线图、散点图等,广泛应用于数据分析、报告生成以及可视化应用中。这个压缩包提供的源代码示例,展示了如何使用 JFreeChart ...

    自定义JFreeChart柱状图的详细说明

    综上所述,自定义JFreeChart柱状图涉及了数据准备、渲染器配置、外观调整、标签和提示信息等多个方面。通过深入理解这些知识点,开发者可以创建出满足各种需求的个性化柱状图。提供的文件如"JFreeChart中柱状图的...

    java使用JFreeChart制作柱形图

    Java 使用 JFreeChart 创建柱形图是一种常见的数据可视化方法,尤其在数据分析和Web应用程序中。JFreeChart 是一个强大的开源库,它提供了多种图表类型,包括柱形图、饼图、线图等,使得开发者能够方便地将数据转化...

    JFreeChart编写柱状图和饼状图及3D饼状图方法

    总的来说,JFreeChart是Java开发中实现数据可视化的强大工具,无论是简单的柱状图、饼状图,还是更具立体感的3D饼状图,都可以通过其提供的API轻松实现。通过熟练掌握JFreeChart的使用,开发者可以更好地将复杂的...

    JFreeChart柱状图资料

    JFreeChart的柱状图常用于商业报告、统计分析、科学实验结果展示等场景。例如,业务分析师可以利用它来展示销售数据,科学家可以用来可视化实验结果,教育者则可能用它来解释复杂的数据关系。 7. **与Web应用集成*...

    jfreechart 图形折线,饼图,柱状图等

    JFreeChart 是一个广泛使用的开源 Java 图形库,它允许开发人员轻松地创建各种图表,包括折线图、饼图和柱状图。这个库为 Java 应用程序提供了丰富的图表功能,适用于数据可视化的需求,无论是简单的报告还是复杂的...

    jfreechart(柱状图,饼状图...)教程.zip

    这个教程可能是为了帮助用户理解如何利用JFreeChart来生成柱状图、饼状图等常见类型的图表。下面我们将深入探讨JFreeChart的基本使用、柱状图和饼状图的创建方法,以及如何结合源码进行学习。 首先,JFreeChart库...

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

    标题中提到的“jfreechart生成折线图、饼图、柱状图、堆栈柱状图”是指使用Java的一个开源图形库JFreeChart来创建不同类型的统计图表。JFreeChart是一个功能全面、成熟的Java图表库,广泛应用于各种应用程序中进行...

    jfreechart 柱状图、曲线图、饼图经

    JFreeChart是一款强大的Java图形库,它为开发者提供了丰富的图表类型,包括柱状图、曲线图和饼图等,使得在Java应用中展示数据变得更加直观和美观。在本篇文章中,我们将深入探讨如何利用JFreeChart来创建这些图表,...

    jfreeChart生成的线状图,饼状图,柱状图

    JFreeChart是一款强大的Java图表库,它允许开发者在应用程序、Swing组件或Web应用中创建出各种复杂的图表,包括线状图、饼状图和柱状图。这些图表类型广泛应用于数据分析、报告制作以及可视化展示等领域。下面我们将...

    JFreeChart饼图、柱状图等

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的高质量图表,如饼图、柱状图、线形图、散点图等。这个库在IT行业中被广泛应用于数据分析、报表生成以及各种可视化应用中。在给定的压缩包文件中,...

Global site tag (gtag.js) - Google Analytics