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

jfreechart柱状曲线图

阅读更多

这个是一个柱状和曲线结合的图形

<%@ 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.NumberAxis,
      org.jfree.chart.renderer.category.LineAndShapeRenderer,
      org.jfree.chart.plot.DatasetRenderingOrder,
      org.jfree.chart.labels.ItemLabelAnchor,
      org.jfree.chart.labels.ItemLabelPosition,
      org.jfree.ui.TextAnchor,
      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[]{"请求总量","接通总量","20秒应答量"};
        String[] columnKeys =null;
  double[][] data = null;   

  String[] rowKeys1 = new String[]{"人工接通率","服务水平","服务水平下线"};
        String[] columnKeys1 =null;
  double[][] data1 = null;   
  
  
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
  int days = 0;
  GregorianCalendar calender = new GregorianCalendar();
   
  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);
 
       columnKeys = new String[days+1];
       data = new double[3][days+1];
   
        columnKeys1 = new String[days+1];
        data1 = new double[3][days+1];
  
   
   columnKeys[0] = startDate.substring(4);
   columnKeys1[0] = startDate.substring(4);

   for (int i = 1; i <= days; i++) {
    calender.add(5, 1);
    columnKeys[i]=format.format(calender.getTime()).substring(4);
    columnKeys1[i]=format.format(calender.getTime()).substring(4);
           }
  
  
  
      String query = "";
   Statement st = db.getStatement();
   ResultSet rs =null;

        query = "select convert(varchar,a.STARTTIME,112) sdate,sum(b.incalls),sum(a.ACDCALLS),sum(a.ACDCALLS*a.PERCENT_SERV_LVL_SPL) 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(varchar,a.STARTTIME,112) order by sdate";

   //out.println(query + "<br>");
   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();
       data[2][n] = new Integer(rs.getString(4))/100;
       
       data1[0][n] = new Integer(rs.getString(3)).doubleValue()/new Integer(rs.getString(2)).doubleValue();
       data1[1][n] = new Integer(rs.getString(4)).doubleValue()/100/new Integer(rs.getString(2)).doubleValue();
       data1[2][n] = 0.7D;
       
       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();
   
   }
  

//数据集1(柱状)
  CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
    rowKeys, columnKeys, data);
 //数据集2(曲线)
  CategoryDataset dataset1 = DatasetUtilities.createCategoryDataset(
    rowKeys1, columnKeys1, data1);
   

//创建一个chart对象
  chart = ChartFactory.createBarChart3D(splitName + "10010热线整体情况统计("+startDate.substring(0,6)+")", "时间", "话务量", dataset,
    PlotOrientation.VERTICAL, true, false, false);

// 图像区域对象
  CategoryPlot plot = chart.getCategoryPlot();

//获取数据轴X轴对象
  CategoryAxis domainAxis = plot.getDomainAxis();
     domainAxis.setLowerMargin(0.02D);//数据轴左边距
        domainAxis.setUpperMargin(0.02D);//右边距
     
//获取图像区域样式对象  
  BarRenderer3D renderer = new BarRenderer3D();

 

//获取Y轴对象(默认的是Y轴左边对象)
  ValueAxis rAxis = plot.getRangeAxis();
  rAxis.setLowerMargin(0.02D);//数据轴左边距
        rAxis.setUpperMargin(0.02D);//右边距
    

//解决字体模糊
    chart.getRenderingHints().put(
              RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF
              );
     

      //获取数据轴对象
       NumberAxis numberaxis3 = new NumberAxis("百分比");
        numberaxis3.setNumberFormatOverride(NumberFormat.getPercentInstance());//设置风格以百分数
        numberaxis3.setAutoRange(false);
        numberaxis3.setLowerMargin(0.02D);//数据轴左边距
        numberaxis3.setUpperMargin(0.02D);//右边距
  
       //把该数据轴放置到右边的Y轴
        plot.setRangeAxis(1, numberaxis3);
        plot.setDataset(1, dataset1);//设置数据集索引
        plot.mapDatasetToRangeAxis(1,1);//将该索引映射到axis 第一个参数指数据集的索引,第二个参数为坐标轴的索引
        //曲线样式对象

        LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer();
         //第一条曲线样式

        lineandshaperenderer.setSeriesPaint(0, new Color(255,0,255));//桃红

       // 第二条曲线样式
        lineandshaperenderer.setSeriesPaint(1, new Color(0,0,255));//墨绿6

       //第三条曲线样式
        lineandshaperenderer.setSeriesPaint(2, Color.BLACK);//墨绿6 
        lineandshaperenderer.setShapesVisible(true);
       
        //设置某坐标轴索引上数据集的显示样式
        plot.setRenderer(1, lineandshaperenderer);

        //设置2个图像的显示顺序:DatasetRenderingOrder.FORWARD:表示后者放在前面;   DatasetRenderingOrder.REVERSE:表示后者放在后面
        plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);

  
  
  
  
      /*----------设置标题字体--------------------------*/
      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.setItemLabelsVisible(true);

 

 //这一部分很重要。当柱体太小时候。数值不能显示,那么只有改边显示的位置
  renderer.setBaseItemLabelGenerator(new   org.jfree.chart.labels.StandardCategoryItemLabelGenerator());//显示每个柱的数值
   renderer.setBaseItemLabelsVisible(true); 
    
     //设置不能在柱子上正常显示的那些数值的显示方式,将这些数值显示在柱子外面
        ItemLabelPosition itemLabelPositionFallback=new ItemLabelPosition(
                  ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT,
                  TextAnchor.HALF_ASCENT_LEFT,-0.0D);
    
//设置当不能正常显示柱状值的时候
          renderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);
          renderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);
         
   
  plot.setRenderer(renderer);
  
   %>
  <body>
 
 
 
  <%
  try
        { 
            int  width=600;   
   if(days >7 && days<=10){
    width =800;
   }
   if(days>10&& days<=20){
    width=900;
   }
   if(days>20 && days<=25){
    width=1100;
   }if(days>25){
    width=1200;
   }
   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>

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

相关推荐

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

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

    jfreechart各类曲线图JSP代码

    JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。它能够用在Swing和Web等中制作自定义的图表或报表,并且得到广泛的应用。本文将通过引领...

    JFreeChart画曲线图

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的2D图表,包括曲线图、柱状图、饼图、散点图等。在本示例中,我们将重点关注如何使用JFreeChart绘制曲线图,以及如何在数据点上显示具体的数据值。 ...

    使用 jfreechart 生成 曲线、柱状图、饼状图、分布图 展示到JSP

    JFreeChart是一个强大的Java库,它允许开发者创建各种类型的图表,包括曲线图、柱状图、饼状图和分布图等。在当前JS图表库盛行的时代,JFreeChart依然因其稳定性和丰富的定制性而在Java领域占有一席之地。本文将详细...

    利用jFreeChart做曲线图、饼状图、柱状图

    jFreeChart是java编程语言中一个功能强大、开源免费的图表库,能够生成各种类型的图表,包括曲线图、饼状图、柱状图等。通过jFreeChart,可以快速地生成高质量的图表,以满足不同领域的需求。 jFreeChart核心对象类...

    flex +jfreechart生成 饼状图+曲线图+柱状图(完整版)

    Flex是一种基于ActionScript的开源框架,主要用于构建富互联网应用程序(RIA),而JFreeChart则是一个Java库,专门用于生成高质量的图表,包括饼状图、柱状图和曲线图等。 在Flex中,我们通常使用MXML和...

    jfreechart 曲线图 3d饼图 3d柱状图

    **JFreeChart库详解:创建3D曲线图、3D饼图和3D柱状图** JFreeChart是一个强大的Java图形库,它提供了多种图表类型,包括曲线图、饼图和柱状图,且支持2D和3D效果。本篇文章将深入探讨如何使用JFreeChart来创建这些...

    柱状图 圆饼图 曲线图 struts2.0 jfreechart

    JFreeChart则是一个强大的Java图表库,能够生成多种类型的图表,包括柱状图、圆饼图和曲线图,非常适合在数据可视化应用中使用。在Struts2.0中集成JFreeChart,可以为Web应用程序添加丰富的图形展示功能,让数据以...

    jfreechart曲线图饼图柱状图 免费图标 图表

    JFreeChart是一款强大的Java图表库,它为开发者提供了丰富的图形绘制功能,包括曲线图、饼图和柱状图等。这个库是免费的,适用于各种项目,无论是商业应用还是个人学习,都能从中受益。在本篇文章中,我们将深入探讨...

    JSP+JFreeChart 实现曲线图、柱形图

    在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而JFreeChart则是一个强大的Java图表库,能够生成各种类型的图表,包括曲线图和柱形图。本项目结合两者,旨在实现数据可视化,使得Web应用可以...

    jfreechart曲线图

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的2D图表,包括曲线图、柱状图、饼图、散点图等。在描述中提到的“jfreechart曲线图”是JFreeChart库中的一种重要图表类型,通常用于展示数据随时间变化...

    struts2 jfreechart 即时曲线图

    这是一个struts2+jfreechart的完整源码程序。...运行DemoTest/RealTimeChart可看到即时曲线图示例。本来这些应资源共享,可下载别人好东西时需要积分,所以设置为1分。希望大家可以互相交流java技术!

    Struts2+JFreeChart+饼状图,柱状图,折线图

    在Struts2框架中集成JFreeChart库,可以方便地创建各种图表,如饼状图、柱状图和折线图,为数据分析和可视化提供便利。 JFreeChart是一个开源的Java类库,用于生成高质量的统计和财务图表。它支持多种图表类型,...

    JFreeChart简单实现光滑曲线绘制

    JFreeChart是一个流行的开源图表库,用于生成各种类型的图表,包括折线图、柱状图、饼图等。下面我们将介绍如何使用JFreeChart简单实现光滑曲线绘制。 光滑曲线绘制 光滑曲线绘制是一种常用的图表绘制方式,用于...

    jfreechart绘制的风速风向玫瑰图

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

    Java生成曲线图

    首先,JFreeChart 是一个开源项目,它提供了多种类型的图表,如柱状图、饼图、散点图、甘特图等,但在这里我们主要关注的是曲线图。JFreeChart 可以轻松地与 Java Swing 或 JavaFX 集成,用于创建桌面应用程序的图形...

    JFreeChart绘图

    这个库能够生成多种类型的图表,包括饼图、柱状图、线图、区域图、分布图、混合图以及甘特图等,使得Java应用程序可以方便地展示数据并进行可视化。 1. **饼图(Pie Chart)** 饼图是数据比例展示的经典方式,...

    applet_+_JfreeChart_实现曲线走势图

    7. 测试与运行:运行HTML文件,浏览器会加载并执行Applet,此时曲线图应该已经在网页上正确显示。 值得注意的是,由于Java Applet的安全性和浏览器兼容性问题,现代Web开发中通常不再推荐使用Applet。若要在Web应用...

Global site tag (gtag.js) - Google Analytics