`

JFreeChart-折线图

阅读更多

package com.zbht.util;

import com.zbht.db.oracle.TBManager;
import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.LinkedHashMap;

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.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Day;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.RectangleInsets;

public class LineXYChart {
 private  int flag = 0;
 
    public String getLineXYChart(HttpSession session, PrintWriter pw,Connection conn,String flag)
    {
        XYDataset dataset = this.createDateSet(conn,flag);//建立数据集
        String fileName = null;
        //建立JFreeChart
        JFreeChart chart = ChartFactory.createTimeSeriesChart(
                "突发事件时间曲线序列图", // title
                "发生时间", // x-axis label
                "突发事件数量", // y-axis label
                dataset, // data
                true, // create legend?
                false, // generate tooltips?
                false // generate URLs?
                );
        //设置JFreeChart的显示属性,对图形外部部分进行调整
        chart.setBackgroundPaint(Color.GREEN);//设置曲线图背景色
        //设置字体大小,形状
        Font font = new Font("宋体", Font.BOLD, 16);
        TextTitle title = new TextTitle("突发事件时间曲线序列图", font);
        chart.setTitle(title);

        XYPlot plot = (XYPlot) chart.getPlot();//获取图形的画布
        plot.setBackgroundPaint(Color.lightGray);//设置网格背景色
        plot.setDomainGridlinePaint(Color.green);//设置网格竖线(Domain轴)颜色
        plot.setRangeGridlinePaint(Color.white);//设置网格横线颜色
        plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));//设置曲线图与xy轴的距离
        plot.setDomainCrosshairVisible(true);
        plot.setRangeCrosshairVisible(true);
        XYItemRenderer r = plot.getRenderer();
        if (r instanceof XYLineAndShapeRenderer)
        {
            XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r;
            //renderer.setD
            //renderer.setDefaultShapesVisible(true);
            //renderer.setDefaultShapesFilled(true);
            renderer.setShapesVisible(true);//设置曲线是否显示数据点
        }

        //设置Y轴
        NumberAxis numAxis = (NumberAxis) plot.getRangeAxis();
        NumberFormat numFormater = NumberFormat.getNumberInstance();
        numFormater.setMinimumFractionDigits(2);
        numAxis.setNumberFormatOverride(numFormater);

        //设置提示信息
        StandardXYToolTipGenerator tipGenerator = new StandardXYToolTipGenerator(
                "历史信息:({1},{2})", new SimpleDateFormat("yyyy-MM"),
                numFormater);
        r.setToolTipGenerator(tipGenerator);

        //设置X轴(日期轴)
        DateAxis axis = (DateAxis) plot.getDomainAxis();
        //axis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM"));
        //format = new SimpleDateFormat("yy-MM");  
        axis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH, 1, new SimpleDateFormat("yyyy-MM")));
        //axis.setAutoRange(true);
      

        axis.setTickMarksVisible(true);  
       // axis.setTickMarkPaint(Color.red);//设置x轴刻度尺颜色  
        //axis.setLabelAngle(45.00d);//x轴标题旋转角度  
       // axis.setTickMarkInsideLength(2f);//刻度尺的长度  
        //axis.setTickMarkOutsideLength(2f);//刻度尺的长度  
        plot.setDomainAxis(axis);
        ChartRenderingInfo info = new ChartRenderingInfo(
                new StandardEntityCollection());
        try
        {
            fileName = ServletUtilities.saveChartAsPNG(chart, 500, 300, info,
                    session);//生成图片
//          Write the image map to the PrintWriter
            ChartUtilities.writeImageMap(pw, fileName, info, false);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        pw.flush();
        return fileName;//返回生成图片的文件名
    }

   
    private XYDataset createDateSet(Connection conn,String flag )
    {
     //显示折线图数据sql语句
     String selectSQL = "";
     String tempArry[] = null;
     String tempArry2[] = null;
     LinkedHashMap lhm = null;
     
     if(flag == "1" || flag.equals("1")){
      selectSQL= "select "+
       "rtrim(char(year(ARISE_TIME)))||'-'||rtrim(char(month(ARISE_TIME))) MYDATE , "+
       "count(*) as MYCOUNT from "+
                "V_ACCIDENT group by "+
                "rtrim(char(year(ARISE_TIME)))||'-'||rtrim(char(month(ARISE_TIME))) order by  "+
                "rtrim(char(year(ARISE_TIME)))||'-'||rtrim(char(month(ARISE_TIME)))"; 
     }
     
     try {
      lhm = TBManager.getMap(selectSQL, conn);
      tempArry = TBManager.getFirstCol(selectSQL, conn);
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
        TimeSeriesCollection dataset = new TimeSeriesCollection();//时间曲线数据集合
        TimeSeries s1 = new TimeSeries("历史曲线",Month.class);//创建时间数据源,每一个//TimeSeries在图上是一条曲线
       
        for(int i=0 ; i<tempArry.length; i++){
         tempArry2 = tempArry[i].split("-");
         //System.out.println("month:"+tempArry2[1]);
         //System.out.println("year:"+tempArry2[0]);
         //System.out.println("数量:"+Double.valueOf(lhm.get(tempArry[i]).toString()));
         s1.add(new Month(Integer.valueOf(tempArry2[1]).intValue(),Integer.valueOf(tempArry2[0]).intValue()),Double.valueOf(lhm.get(tempArry[i]).toString()));
        }
        dataset.addSeries(s1);
        dataset.setDomainIsPointsInTime(true);
        return dataset;
    }
   

}

分享到:
评论
1 楼 hllf123 2011-12-06  
如果折线图上拐点显示数据会出现逗号 也就是:48,580  怎么去掉这个逗号呢

相关推荐

Global site tag (gtag.js) - Google Analytics