chart

来源:互联网 发布:json高亮美化工具 编辑:程序博客网 时间:2024/05/11 22:09

import java.awt.Color;
import java.awt.Font;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DecimalFormat;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.TextAnchor;

import com.wyebd.www.poi.Poi;

public class Chart {
 public String generateTiao(String title, String x, String y, String data[][],
   HttpServletResponse response, String show) throws IOException {

  String result = "yes";
  if (show.equalsIgnoreCase("Line")) {
   DefaultCategoryDataset dataset = new DefaultCategoryDataset();
   int total = 0;
   //System.out.println("****"+data.length);
   for (int i1 = 1; i1 < data.length; i1++) {
    int count = 0;
    for (int i = 1; i < data[0].length; i++) {
     if (data[i1][i]==null||"empty".equalsIgnoreCase(data[i1][i])) {
      count++;
     } else {
      dataset.addValue(Double.parseDouble(data[i1][i]),
        data[i1][0], data[0][i]);
     }
    }
    //System.out.println("****"+data[1][2]);
    if (count >= (data[0].length - 1)) {
     total++;
    }
   }
   if (total >= (data.length - 1)) {
    result = "no";
   } else {
    // 定义图表对象
    JFreeChart chart = ChartFactory.createLineChart(title, // chart
                  // title
      x, // domain axis label
      y, // range axis label
      dataset, // data
      PlotOrientation.VERTICAL, // orientation
      true, // include legend
      true, // tooltips
      false // urls
      );
    CategoryPlot plot = chart.getCategoryPlot();
    // customise the range axis...
    NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    rangeAxis.setStandardTickUnits(NumberAxis
      .createIntegerTickUnits());
    rangeAxis.setAutoRangeIncludesZero(true);
    rangeAxis.setUpperMargin(0.20);
    rangeAxis.setLabelAngle(Math.PI / 2.0);
    // 获得renderer 注意这里是下嗍造型到lineandshaperenderer!!
    LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) plot
      .getRenderer();
    //点(即数据点)可见
    lineandshaperenderer.setShapesVisible(true);
       DecimalFormat decimalformat1 = new DecimalFormat("##.#");//数据点显示数据值的格式
       lineandshaperenderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", decimalformat1));
                                           //上面这句是设置数据项标签的生成器
       lineandshaperenderer.setItemLabelsVisible(true);//设置项标签显示
       lineandshaperenderer.setBaseItemLabelsVisible(true);//基本项标签显示
                  //上面这几句就决定了数据点按照设定的格式显示数据值 
       lineandshaperenderer.setShapesFilled(Boolean.TRUE);//在数据点显示实心的小图标
       lineandshaperenderer.setShapesVisible(true);//设置显示小图标
    ChartUtilities.writeChartAsJPEG(response.getOutputStream(),
      chart, 640, 400);
   }
  } else if (show.equalsIgnoreCase("Bar")) {
   DefaultCategoryDataset dataset = new DefaultCategoryDataset();
   int total = 0;

   for (int i1 = 1; i1 < data.length; i1++) {
    int count = 0;
    for (int i = 1; i < data[0].length; i++) {
     if (data[i1][i]==null||"empty".equalsIgnoreCase(data[i1][i])) {
      count++;
     } else {
      dataset.addValue(Double.parseDouble(data[i1][i]),
        data[i1][0], data[0][i]);
     }
    }
    if (count >= (data[0].length - 1)) {
     total++;
    }
   }
   if (total >= (data.length - 1)) {
    result = "no";
   } else {
    JFreeChart chart = ChartFactory.createStackedBarChart3D(title,
      x, y, dataset, PlotOrientation.VERTICAL, true, false,
      false);
    CategoryPlot plot = chart.getCategoryPlot(); // 获得
                // plot:CategoryPlot!!
    ValueAxis rangeAxis = plot.getRangeAxis();
    // 设置最高的一个柱与图片顶端的距离:
    rangeAxis.setUpperMargin(0.15);
    // 设置最低的一个柱与图片底端的距离:
    rangeAxis.setLowerMargin(0.15);

    // 设置图形上显示的数值
    BarRenderer3D renderer = new BarRenderer3D();
    renderer.setBaseOutlinePaint(Color.BLACK);
    // 设置每个地区所包含的平行柱之间的距离
    renderer.setItemMargin(0.1);
          renderer.setItemLabelAnchorOffset(15D);//值与柱顶的距离
          renderer.setPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
    // 显示每个柱的数值,并修改该数值的字体属性
    renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
    renderer.setItemLabelFont(new Font("黑体", Font.PLAIN, 12));
    renderer.setItemLabelsVisible(true);
    renderer.setMaximumBarWidth(0.10);
    plot.setRenderer(renderer);

    ChartUtilities.writeChartAsJPEG(response.getOutputStream(),
      chart, 640, 400);
   }

  } else if (show.equalsIgnoreCase("Pie")) {
   DefaultPieDataset piedata = new DefaultPieDataset();
   int out_l = data.length;
   int in_l = data[0].length;
   int count = 0;
   try{
    for (int i=1;i<out_l;i++) {
     if(in_l>2){
      int in_count = 0;
      for(int j=1;j<in_l;j++){       
       if (data[i][j]==null||("empty").equalsIgnoreCase(data[i][j])) {
        in_count++;
       } else {
        piedata.setValue(data[0][j], Double.parseDouble(data[i][j]));
       }
      }
      if(in_count>=in_l-1){
       result = "no";
      }
     }else{
      if (data[i][1]==null||("empty").equalsIgnoreCase(data[i][1])) {
       count++;
      } else {
       piedata.setValue(data[i][0], Double.parseDouble(data[i][1]));
      }
     }
    }
   }catch(Exception e){
    e.printStackTrace();
   }
   if (count >= out_l - 1) {
    result = "no";
   } else {
    // 3D饼图
    PiePlot3D plot = new PiePlot3D(piedata);
    // 指定图片的透明度
    plot.setForegroundAlpha(1.0f);
    // 指定显示的饼图上圆形(false)还椭圆形(true)
    plot.setCircular(false);

    JFreeChart chart = new JFreeChart("",
      JFreeChart.DEFAULT_TITLE_FONT, plot, true);
    chart.setTitle(new TextTitle(title, new Font("宋体", Font.BOLD,
      25)));
    chart.setBackgroundPaint(Color.white);
    ChartUtilities.writeChartAsJPEG(response.getOutputStream(),
      chart, 640, 400);
   }
  }
  return result ;
 }
}