java报表折线图

package com.potevio.rnd.tobacco.mine;

import java.util.Map;

/**
 * @description 数据BEAN
 * @author Zhou-Jingxian
 */
public class Bean {

 private String goods_name ;
 private Map<String,Double> priceindexMap;
 
 public String getGoods_name() {
  return goods_name;
 }
 public void setGoods_name(String goods_name) {
  this.goods_name = goods_name;
 }

 public Map<String, Double> getPriceindexMap() {
  return priceindexMap;
 }
 public void setPriceindexMap(Map<String, Double> priceindexMap) {
  this.priceindexMap = priceindexMap;
 }
 
 
}

 

 

package com.potevio.rnd.tobacco.mine;

import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.TextAnchor;

/**
 * @description 使用JFreeChart组建,生成一个价格随日期的走势图表
 * @author Zhou-Jingxian
 */
public class TimeSeriesChartUtil {
 
 private String type;//month,year
 private int width ;//后台计算
 private int height;//后台计算
 private String title;//图表的主标题
 private String subTitle;//图表的子标题
 private String xName;//可默认值:月份
 private String yName;//可默认值:价格指数
 
 /***
  * constructor function
  * @param type
  * @param title
  * @param subTitle
  * @param xName
  * @param yName
  */
 public TimeSeriesChartUtil(String type,String title,String subTitle,String xName,String yName){
  this.type = type;
  this.title = title;
  this.subTitle = subTitle;
  this.xName = xName;
  this.yName = yName;
  if("month".equals(type)){
   this.width = 800;
   this.height = 600;
  }else if("year".equals(type)){
   this.width = 600;
   this.height = 400;
  }
 }
 
 /** 根据TimeSeriesCollection创建JFreeChart对象*/  
    public JFreeChart createChart(TimeSeriesCollection dataset) {  
     
     JFreeChart chart = ChartFactory.createTimeSeriesChart(this.title, this.xName,this.yName, dataset, true, true, true);
     
  XYPlot plot = (XYPlot) chart.getPlot();
  XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();
  //设置网格背景颜色
  plot.setBackgroundPaint(Color.white);
  //设置网格竖线颜色
  plot.setDomainGridlinePaint(Color.pink);
  //设置网格横线颜色
  plot.setRangeGridlinePaint(Color.pink);
  //设置曲线图与xy轴的距离
  plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));
  //设置曲线是否显示数据点
  xylineandshaperenderer.setBaseShapesVisible(true);
  //设置曲线显示各数据点的值
  XYItemRenderer xyitem = plot.getRenderer();  
  xyitem.setBaseItemLabelsVisible(true);  
  xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
  xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
  xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));
  plot.setRenderer(xyitem);
  
  //设置子标题
  TextTitle subtitle = new TextTitle(this.subTitle, new Font("黑体", Font.BOLD, 12));
  chart.addSubtitle(subtitle);
  //设置主标题
  chart.setTitle(new TextTitle(this.title, new Font("隶书", Font.ITALIC, 15)));
  //设置背景颜色
  chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 0, 1000,Color.blue));
  chart.setAntiAlias(true);
 
        return chart;  
    }  
 
    /**创建TimeSeriesCollection对象  */
    public TimeSeriesCollection createDataset(List<Bean> datalist){
     
     //时间曲线数据集合
  TimeSeriesCollection lineDataset = new TimeSeriesCollection();
  for(int i=0;i<datalist.size();i++){
         Bean bean = datalist.get(i);
         TimeSeries series = new TimeSeries(bean.getGoods_name(),Month.class);
      Map<String,Double> pimap = bean.getPriceindexMap();
      Set piset = pimap.entrySet();  
      Iterator piIterator = piset.iterator();  
      while(piIterator.hasNext()){  
          Map.Entry<String,Double> hiddenMapEntry = (Map.Entry<String,Double>)piIterator.next(); 
          String key = hiddenMapEntry.getKey();  
          int year = Integer.parseInt(key.substring(0,4));
          int month = Integer.parseInt(key.substring(4, 6));
          series.add(new Month(month,year),hiddenMapEntry.getValue());
      } 
         lineDataset.addSeries(series);
        }
  return lineDataset;
    }
    
 /**保存为文件*/  
    public void saveAsFile(JFreeChart chart, String outputPath) {  
        FileOutputStream out = null;  
        try {  
            File outFile = new File(outputPath);  
            if (!outFile.getParentFile().exists()) {  
                outFile.getParentFile().mkdirs();  
            }  
            out = new FileOutputStream(outputPath);  
            // 保存为PNG  
            ChartUtilities.writeChartAsPNG(out, chart, width, height);  
            // 保存为JPEG  
            // ChartUtilities.writeChartAsJPEG(out, chart, width, height);  
            out.flush();  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (out != null) {  
                try {  
                    out.close();  
                } catch (IOException e) {  
                    // do nothing  
                }  
            }  
        }  
    }  
 
 public int getWidth() {
  return width;
 }

 public void setWidth(int width) {
  this.width = width;
 }

 public int getHeight() {
  return height;
 }

 public void setHeight(int height) {
  this.height = height;
 }  
 
 public String getXName() {
  return xName;
 }

 public void setXName(String name) {
  xName = name;
 }

 public String getYName() {
  return yName;
 }

 public void setYName(String name) {
  yName = name;
 }

 public String getType() {
  return type;
 }

 public void setType(String type) {
  this.type = type;
 }


 public String getTitle() {
  return title;
 }

 public void setTitle(String title) {
  this.title = title;
 }

 public String getSubTitle() {
  return subTitle;
 }

 public void setSubTitle(String subTitle) {
  this.subTitle = subTitle;
 }

}

package com.potevio.rnd.tobacco.mine;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jfree.chart.JFreeChart;
import org.jfree.data.time.TimeSeriesCollection;


/**
 * @description 构造数据,测试图片生成
 * @author Zhou-Jingxian
 */
public class Main {
  
    public static void main(String[] args) {
     
     TimeSeriesChartUtil util = new TimeSeriesChartUtil("year", "重点品牌价格走势图", "2009年8-10月走势图", "时间", "价格指数");
     List<Bean> datalist = new ArrayList<Bean>();
     
     Bean bean1 = new Bean();
     bean1.setGoods_name("中华");
     Map<String,Double> priceindexMap1 = new HashMap<String,Double>();
     priceindexMap1.put("200903", 99.86);
     priceindexMap1.put("200904", 99.8);
     priceindexMap1.put("200905", 99.97);
     priceindexMap1.put("200906", 99.96);
     priceindexMap1.put("200907", 99.86);
     priceindexMap1.put("200908", 99.8);
     priceindexMap1.put("200909", 99.97);
     priceindexMap1.put("200910", 99.96);
     bean1.setPriceindexMap(priceindexMap1);
     datalist.add(bean1);
     
     Bean bean2 = new Bean();
     bean2.setGoods_name("芙蓉王");
     Map<String,Double> priceindexMap2 = new HashMap<String,Double>();
     priceindexMap2.put("200903", 100.12);
     priceindexMap2.put("200904", 100.2);
     priceindexMap2.put("200905", 100.0);
     priceindexMap2.put("200906", 100.08);
     priceindexMap2.put("200907", 100.12);
     priceindexMap2.put("200908", 100.2);
     priceindexMap2.put("200909", 100.0);
     priceindexMap2.put("200910", 100.08);
     bean2.setPriceindexMap(priceindexMap2);
     datalist.add(bean2);
     
     Bean bean3 = new Bean();
     bean3.setGoods_name("云烟");
     Map<String,Double> priceindexMap3 = new HashMap<String,Double>();
     priceindexMap3.put("200903", 99.77);
     priceindexMap3.put("200904", 99.7);
     priceindexMap3.put("200905", 99.83);
     priceindexMap3.put("200906", 99.93);
     priceindexMap3.put("200907", 99.77);
     priceindexMap3.put("200908", 99.7);
     priceindexMap3.put("200909", 99.83);
     priceindexMap3.put("200910", 99.93);
     bean3.setPriceindexMap(priceindexMap3);
     datalist.add(bean3);
     
        //步骤1:创建XYDataset对象(准备数据)
        TimeSeriesCollection dataset = util.createDataset(datalist);
        //步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置
        JFreeChart freeChart = util.createChart(dataset);
       
        //步骤3:将JFreeChart对象输出到文件,Servlet输出流等  
        util.saveAsFile(freeChart, "D:\\jfreechart\\lineXY_"+Math.random()*20+".png");  
    }  
 
}

 

需要导入jfreechart.jar包方可运行,最后生成一张图片D:\\jfreechart\\lineXY_"+Math.random()*20+".png。

你可能感兴趣的:(java报表折线图)