JFreeChart做的曲线图和饼图

 Line.java

package  com.JFreeChart;

import  java.io.PrintWriter;
import  java.sql.ResultSet;
import  java.sql.SQLException;
import  java.text.NumberFormat;
import  java.text.SimpleDateFormat;
import  java.util.Calendar;
import  java.util.Date;

import  javax.servlet.http.HttpSession;

import  org.jfree.chart.ChartFactory;
import  org.jfree.chart.ChartRenderingInfo;
import  org.jfree.chart.ChartUtilities;
import  org.jfree.chart.JFreeChart;
import  org.jfree.chart.axis.DateAxis;
import  org.jfree.chart.axis.DateTickUnit;
import  org.jfree.chart.axis.NumberAxis;
import  org.jfree.chart.axis.NumberTickUnit;
import  org.jfree.chart.entity.StandardEntityCollection;
import  org.jfree.chart.labels.StandardXYToolTipGenerator;
import  org.jfree.chart.plot.XYPlot;
import  org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import  org.jfree.chart.servlet.ServletUtilities;
import  org.jfree.chart.urls.TimeSeriesURLGenerator;
import  org.jfree.data.time.Day;
import  org.jfree.data.time.TimeSeries;
import  org.jfree.data.time.TimeSeriesCollection;
import  org.jfree.ui.RectangleInsets;

import  com.twthinker.sys.DBLink;
import  com.twthinker.sys.ErrorLogs;

public   class  Line  {
    
private DBLink dbConn = new DBLink();
    
private ErrorLogs errorlogs = new ErrorLogs();
    
private String id = "";
    
private String ip = "";
    
double sum_dryl = 0.0D// 当日运量 总和
    double sum_drdx = 0.0D// 当日地销 总和
    double max_dryl = 0.0D// 最大运量
    double max_drdx = 0.0D// 最大地销
    double min_dryl = 0.0D// 最小运量
    double min_drdx = 0.0D// 最小地销
    
    
public Line() {
    }


    
//产生折线图
    public String createTimeSeriesChart(String userid, String userip,HttpSession session, PrintWriter pw) throws SQLException {
        String filename 
= null;
        
this.id = userid;
        
this.ip = userip;
        
//年月
        SimpleDateFormat nyr = new SimpleDateFormat("yyyy-MM");
        java.util.Date ny 
= new java.util.Date();
        String s_ny 
= nyr.format(ny);
        
//
        SimpleDateFormat nf = new SimpleDateFormat("yyyy");
        java.util.Date nownf 
= new java.util.Date();
        String currentyear 
= nf.format(nownf);
        
int i_year = Integer.parseInt(currentyear);
        
//
        SimpleDateFormat yf = new SimpleDateFormat("MM");
        java.util.Date nowyf 
= new java.util.Date();
        String currentmonth 
= yf.format(nowyf);
        
int i_month = Integer.parseInt(currentmonth);
        
//
        SimpleDateFormat dd = new SimpleDateFormat("dd");
        java.util.Date nowdd 
= new java.util.Date();
        String currentday 
= dd.format(nowdd);
        
int i_day = Integer.parseInt(currentday);

        
        
//一个月有多少天数
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, i_year);
        cal.set(Calendar.MONTH, i_month 
- 1);//Calendar.MONTH - 用来设置 MONTH
        int maxday = cal.getMaximum(Calendar.DAY_OF_MONTH);
        
        
//日历字段的值。Month 值是基于 0 的。例如,0 表示
        
//1月份。
        int maxDate = cal.getActualMaximum(Calendar.DATE);//返回指定日历字段可能拥有的最大值
        int minDate = cal.getActualMinimum(Calendar.DATE);//返回指定日历字段可能拥有的最小值

        
try {
            TimeSeries series 
= new TimeSeries("ty", Day.class); //第一条折线(铁运)
            TimeSeries series1 = new TimeSeries("dx", Day.class); //第二条折线(地销)
            Day day;

            
//添加测试数据 maxDate 就是当前月份最大的天数
            
//最大值就是表示当前月有多少天
            for (int i = 1; i <= (maxday-1); i++{
                
//day=new Day(1,11,2007); //2007年11月1日开始
                day = new Day(i, i_month, i_year); // 定义日期
                if(i <= i_day){
                    String d_rq 
= i_year + "-" + i_month + "-" + i; //设置SQL语句
                    getSale(d_rq); //SQL执行 获得相关的数据
                    series.add(day, sum_dryl); //添加数据(铁运数据)
                    series1.add(day, sum_drdx); //添加数据(地销数据)
                }

                
else{
                    series.add(day,
null); //添加数据(铁运数据)
                    series1.add(day,null); //添加数据 (地销数据)
                }

            }


            TimeSeriesCollection timeseriescollection 
= new TimeSeriesCollection(); // 定义折线集合
            timeseriescollection.addSeries(series); //添加第一条曲线(铁运数据)
            timeseriescollection.addSeries(series1); //添加第二条曲线(地销数据)

            
int years = i_year - 1900;
            
int months = i_month - 1;
            Date min 
= new Date(years, months, minDate);
            Date max 
= new Date(years, months, maxday);
            
            
// 横坐标设置
            DateAxis dateAxis = new DateAxis("");
            dateAxis.setRange(min, max); 
// 日期轴上的最小日期,最大日期
            dateAxis.setTickUnit(new DateTickUnit(DateTickUnit.DAY, 1));//x轴单位间隔为1天
            dateAxis.setDateFormatOverride(new SimpleDateFormat("dd"));//日期轴日期标签的显示格式
            dateAxis.setVerticalTickLabels(false);//设置日期轴上的日期纵向显示
            
// 只显示 日(号)

            getMaxMinSale(currentyear, currentmonth);
            
double maxAxis = max_dryl > max_drdx ? max_dryl : max_drdx;
            
double minAxis = min_dryl > min_drdx ? min_dryl : min_drdx;

            
// 纵坐标设定
            double TickUnit = 100.0D// 标尺刻度
            NumberAxis numberaxis = new NumberAxis();
            numberaxis.setRange(minAxis, maxAxis 
+ TickUnit); // 高度范围为 min - max sp:销售量
            numberaxis.setTickUnit(new NumberTickUnit(TickUnit));

            StandardXYToolTipGenerator ttg 
= new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT, nyr,NumberFormat.getInstance());
            TimeSeriesURLGenerator urlg 
= new TimeSeriesURLGenerator(nyr,"saleqk.jsp""series""hitDate");
            StandardXYItemRenderer renderer 
= new StandardXYItemRenderer(StandardXYItemRenderer.LINES+ StandardXYItemRenderer.SHAPES, ttg, urlg);
            renderer.setShapesFilled(
true);            //数据点为实心
            renderer.setBaseShapesVisible(true); // 设置曲线是否显示数据点

            XYPlot plot 
= new XYPlot(timeseriescollection, dateAxis,numberaxis, renderer);
            plot.setAxisOffset(
new RectangleInsets(5.05.05.05.0)); // 设定坐标轴与图表数据显示部分距离
            JFreeChart chart = new JFreeChart("窑街矿物局"+ s_ny + "月份煤炭销售总量",JFreeChart.DEFAULT_TITLE_FONT, plot, true);
            chart.setBackgroundPaint(java.awt.Color.white);
            
            ChartRenderingInfo info 
= new ChartRenderingInfo(new StandardEntityCollection());
            filename 
= ServletUtilities.saveChartAsPNG(chart,800,400,info,session);
            ChartUtilities.writeImageMap(pw, filename, info, 
false);
            pw.flush();
        }
 catch (Exception e) {
            errorlogs.writeSyslog(
"com.JFreeChart.Line_Exception:"+e.getMessage());
            filename 
= "public_error_500x300.png";
        }

        
return filename;
    }


    
// 获得销售量
    public void getSale(String day) throws SQLException {
        
//TB_YX_MTDYTJJCB_DATA(煤炭调运统计基础表)---- n_dryl(当日运量) n_drdx(当日地销)
        String Salesql = "select sum(n_dryl),sum(n_drdx) from TB_YX_MTDYTJJCB_DATA where d_rq='"+ day + "'";
        ResultSet rs 
= dbConn.executeQuery(id,ip,Salesql);
        
while (rs.next()) {
            sum_dryl 
= rs.getDouble(1);
            sum_drdx 
= rs.getDouble(2);
        }

        rs.close();
    }


    
// 获得月份 最大 最小销售量 作为曲线图纵坐标
    public void getMaxMinSale(String year, String month) throws SQLException {
        
//TB_YX_MTDYTJJCB_DATA(煤炭调运统计基础表)---- n_dryl(当日运量) n_drdx(当日地销)
        String Salesql = "select max(n_dryl),max(n_drdx),min(n_dryl),min(n_drdx) from TB_YX_MTDYTJJCB_DATA where d_rq like '%"+ year + "%' and d_rq like '%" + month + "%'";
        ResultSet rs 
= dbConn.executeQuery(id,ip,Salesql);
        
while (rs.next()) {
            max_dryl 
= rs.getDouble(1);
            max_drdx 
= rs.getDouble(2);
            min_dryl 
= rs.getDouble(3);
            min_drdx 
= rs.getDouble(4);
        }

        rs.close();
    }


    
// Clean up resources
    public void destroy() {
    }

}

PiePlot.java

 

package  com.JFreeChart;

import  java.io.IOException;
import  java.io.OutputStream;
import  java.io.PrintWriter;
import  java.sql.ResultSet;
import  java.sql.SQLException;

import  javax.servlet.ServletException;
import  javax.servlet.http.HttpServlet;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;
import  javax.servlet.http.HttpSession;

import  org.jfree.chart.ChartRenderingInfo;
import  org.jfree.chart.ChartUtilities;
import  org.jfree.chart.JFreeChart;
import  org.jfree.chart.entity.StandardEntityCollection;
import  org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import  org.jfree.chart.labels.StandardPieToolTipGenerator;
import  org.jfree.chart.plot.PiePlot3D;
import  org.jfree.chart.servlet.ServletUtilities;
import  org.jfree.chart.urls.StandardPieURLGenerator;
import  org.jfree.data.general.DefaultPieDataset;

import  com.twthinker.sys.DBLink;

public   class  PiePlot {
    
public String getPieChart(String userid, String userip,HttpSession session, PrintWriter pw) throws ServletException, IOException {
        String filename 
= null;
//        饼图代码
        
//String sql = "select t2.mc,sum(t1.n_dr) from TB_YX_DXGBRBBBYYS_DATA t1,TB_YX_BMZNWHB_DD t2 where t1.c_km=t2.id and t1.d_kprq='"+currentyear+"' group by t1.c_km,t2.mc";
        String sql = "select t2.mc,sum(t1.n_dr) from TB_YX_DXGBRBBBYYS_DATA t1,TB_YX_BMZNWHB_DD t2 where t1.c_km=t2.id and t1.d_kprq='2007-11-06' group by t1.c_km,t2.mc";
        DBLink dbConn 
= new DBLink();
        DefaultPieDataset data 
= new DefaultPieDataset();
        ResultSet rss 
= dbConn.executeQuery(userid, userip, sql);
        
if (rss != null{
            
try {
                
while (rss.next()) {
            data.setValue(rss.getString(
1), rss.getFloat(2));
                }

            }
 catch (SQLException e) {
                e.printStackTrace();
            }

        }

        PiePlot3D plot 
= new PiePlot3D(data);//3D饼图 
        plot.setURLGenerator(new StandardPieURLGenerator("111.jsp"));//设定链接 
        JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);
        chart.setBackgroundPaint(java.awt.Color.white);
//可选,设置图片背景色 
        chart.setTitle("各矿销售比例图");//可选,设置图片标题 

        
//设置百分比
        plot.setLabelGenerator(new StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
        plot.setLegendLabelGenerator(
new StandardPieSectionLabelGenerator("{0}=({1}M, {2})"));
        StandardEntityCollection sec 
= new StandardEntityCollection();
        ChartRenderingInfo info 
= new ChartRenderingInfo(sec);

        
//500是图片长度,300是图片高度 
        filename = ServletUtilities.saveChartAsPNG(chart, 500300,info, session);
        ChartUtilities.writeImageMap(pw, 
"map0", info, false);
        
return filename;
    }

}

 

sale.jsp

 

<% @ page contentType="text/html;charset=GB2312" language="java" %>
<% @ page import="org.jfree.data.general.DefaultPieDataset" %>
<% @ page import="org.jfree.chart.*" %>
<% @ page import="org.jfree.chart.plot.*" %>
<% @ page import="org.jfree.chart.servlet.ServletUtilities" %>
<% @ page import="org.jfree.chart.labels.*" %>
<% @ page import="org.jfree.chart.urls.StandardPieURLGenerator" %>
<% @ page import="org.jfree.chart.entity.StandardEntityCollection" %>
<% @ page import="com.JFreeChart.Line"  %>
<% @ page import="com.JFreeChart.PiePlot"  %>
<% @ page import="java.sql.*" %>
<% @ page import="java.io.*" %>
<% @ page import="java.io.OutputStream" %>
<% @ page import="java.util.*" %>
<% @ page import="java.net.*" %>
<% @ page import="java.text.*" %>
<% @ page import="javax.servlet.http.HttpSession" %>
<% @ page import="com.twthinker.sys.DBLink" %>
<% @ page import="com.twthinker.LoginUserInfo.*" %>
<% @ page import="com.JFreeChart.PiePlot" %>
<% @ page import="java.io.PrintWriter"  %>
< html >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=gb2312" >
< title ></ title >
< link  href ="../images/welcss.css"  rel ="stylesheet"  type ="text/css" >
</ head >

<%

    ResultSet rss 
= null;
    UserInfo userinfo 
= (UserInfo) session.getAttribute("userinfo");
    
String userid = userinfo.getUserid();
    
String userip = userinfo.getUserip();
    SimpleDateFormat df 
= new SimpleDateFormat("yyyy-MM-dd");
    java.util.Date 
now = new java.util.Date();
    
String currentyear = df.format(now);
    
    
%>
< body >
< div  id ="fenge6" >
< div  id ="zslrbg" >
< table  width ="100%"  border ="0"  class ="tab2border" >
    
< tr >
        
< td >
        
< div  id ="liebiaotop" > &nbsp;&nbsp; 我的待办事项 </ div >
        
</ td >
    
</ tr >
    
< tr >
        
< td  class ="z2"  align ="center" >
        
< table  width ="96%"  class ="liebiaotab" >
            
< tr >
                
< td  width ="20"  align ="center" >< img  src ="../images/img_z1.gif" ></ td >
                
< td >< href ="#" > 查看项目内容 </ a ></ td >
                
< td  align ="right" > 2007-10-16 </ td >
            
</ tr >
            
< tr  class ="liebiaotabcol" >
                
< td  align ="center" >< img  src ="../images/img_z2.gif" ></ td >
                
< td >< href ="#" > 待解决项目内容 </ a ></ td >
                
< td  align ="right" > 2007-10-16 </ td >
            
</ tr >
            
< tr >
                
< td  align ="center" >< img  src ="../images/img_z3.gif" ></ td >
                
< td >< href ="#" > 需修改项目内容 </ a ></ td >
                
< td  align ="right" > 2007-10-16 </ td >
            
</ tr >
            
< tr  class ="liebiaotabcol" >
                
< td  align ="center" >< img  src ="../images/img_z1.gif" ></ td >
                
< td >< href ="#" > 查看项目内容 </ a ></ td >
                
< td  align ="right" > 2007-10-16 </ td >
            
</ tr >
            
< tr >
                
< td  align ="center" >< img  src ="../images/img_z2.gif" ></ td >
                
< td >< href ="#" > 待解决项目内容 </ a ></ td >
                
< td  align ="right" > 2007-10-16 </ td >
            
</ tr >

        
</ table >
        
</ td >
    
</ tr >
</ table >
</ div >
</ div >
< div  id ="fenge4" >
< div  id ="zslrbg" >
< table  width ="100%"  border ="0"  class ="tab2border" >
    
< tr >
        
< td  class ="z2" >
        
< div  id ="liebiaotop" > &nbsp;&nbsp; 公告信息 </ div >
        
</ td >
    
</ tr >
    
< tr >
        
< td  class ="z2"  align ="center" >
        
< table  width ="96%"  class ="liebiaotab" >
            
< tr >
                
< td  width ="20"  align ="center" >< img  src ="../images/img_z0.gif" ></ td >
                
< td >< href ="#" > 附近建行在哪里? </ a ></ td >
            
</ tr >
            
< tr  class ="liebiaotabcol" >
                
< td  align ="center" >< img  src ="../images/img_z0.gif" ></ td >
                
< td >< href ="#" > 在线回答有关眼睛的问题 </ a ></ td >
            
</ tr >
            
< tr >
                
< td  align ="center" >< img  src ="../images/img_z0.gif" ></ td >
                
< td >< href ="#" > 中国对非洲的援助频频遭到西方国家的不满 </ a ></ td >
            
</ tr >
            
< tr  class ="liebiaotabcol" >
                
< td  align ="center" >< img  src ="../images/img_z0.gif" ></ td >
                
< td >< href ="#" > 广东珠海从小学到高中12年全免费 </ a ></ td >
            
</ tr >
            
< tr >
                
< td  align ="center" >< img  src ="../images/img_z0.gif" ></ td >
                
< td >< href ="#" > 歌曲《歌唱祖国》作者在天津去世 </ a ></ td >
            
</ tr >
        
</ table >
        
</ td >
    
</ tr >
</ table >
</ div >
</ div >
< div  id ="jiange" >
<%
    
//曲线图 代码见:package com.JFreeChart.Line.java
    Line line
=new Line();
    
String filename1 = line.createTimeSeriesChart(userid,userip,session,new PrintWriter(out));
    
String graphURL1 = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename1;
%>
<!--usemap 很重要,为每个数据点或者饼图的区域,鼠标滑过显示数据-->
< img  src ="<%=graphURL1%>"  border =1  usemap ="#<%=filename1%>" >< br >< br >
<%
    
//饼图代码
    PiePlot aaa
=new PiePlot();
    
String filename = aaa.getPieChart(userid,userip,session,new PrintWriter(out));
    
String graphPieplotURL = request.getContextPath()+ "/servlet/DisplayChart?filename=" + filename;
%>
< img  src ="<%=graphPieplotURL%>"  border =0  usemap ="#map0" >
</ div >
</ body >
</ html >

 

web.xml

 

   < servlet >
    
< servlet-name > DisplayChart </ servlet-name >
    
< servlet-class > org.jfree.chart.servlet.DisplayChart </ servlet-class >
  
</ servlet >
  
< servlet-mapping >
     
< servlet-name > DisplayChart </ servlet-name >
     
< url-pattern > /servlet/DisplayChart </ url-pattern >
  
</ servlet-mapping >
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值