Jfreechart

import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;

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.NumberTickUnit;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

//JFreeChart Line Chart(折线图)     
public class TestJfreeChart { 
    /**
     * 创建JFreeChart Line Chart(折线图)
     * @throws IOException
     */ 
    public static void main(String[] args) throws IOException { 
        // 步骤1:创建CategoryDataset对象(准备数据)  
        CategoryDataset dataset = createDataset(); 
        // 步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置  
        JFreeChart freeChart = createChart(dataset); 
        // 步骤3:将JFreeChart对象输出到文件,Servlet输出流等  
        ChartUtilities.saveChartAsJPEG(new File("d:/aaaa.jpg"), freeChart, 800, 600);
//        saveAsFile(freeChart, "E:\\line.jpg", 600, 400); 
//
//  ByteArrayOutputStream bos = new ByteArrayOutputStream();
//  ChartUtilities.writeChartAsJPEG(bos, freeChart, 1000, 1000);
//  System.out.println(bos.toByteArray());
    } 
 
//    // 保存为文件  
//    public static void saveAsFile(JFreeChart chart, String outputPath, 
//            int weight, int height) { 
//        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, 600, 400);  
//            // 保存为JPEG  
//            ChartUtilities.writeChartAsJPEG(out, chart, 600, 400); 
//            out.flush(); 
//        } catch (FileNotFoundException e) { 
//            e.printStackTrace(); 
//        } catch (IOException e) { 
//            e.printStackTrace(); 
//        } finally { 
//            if (out != null) { 
//                try { 
//                    out.close(); 
//                } catch (IOException e) { 
//                    // do nothing  
//                } 
//            } 
//        } 
//    } 
 
    // 根据CategoryDataset创建JFreeChart对象  
    public static JFreeChart createChart(CategoryDataset categoryDataset) { 
        // 创建JFreeChart对象:ChartFactory.createLineChart  
        JFreeChart jfreechart = ChartFactory.createLineChart("Antibody Titration", // 标题  
                "Antibody Titration(X1000)", // categoryAxisLabel (category轴,横轴,X轴标签)  
                "OD 450", // valueAxisLabel(value轴,纵轴,Y轴的标签)  
                categoryDataset, // dataset  
                PlotOrientation.VERTICAL, true, // legend  
                false, // tooltips  
                false); // URLs  
        // 使用CategoryPlot设置各种参数。以下设置可以省略。  
        CategoryPlot plot = (CategoryPlot)jfreechart.getPlot(); 
        // 背景色 透明度  
        plot.setBackgroundAlpha(0.0f); 
        //设置网格横线颜色   
        plot.setBackgroundPaint(Color.white); 
        plot.setRangeGridlinePaint(Color.black);   
        // 前景色 透明度  
        plot.setForegroundAlpha(1.0f); 
        NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();
        ValueAxis valueAxis = plot.getRangeAxis();
        valueAxis.setStandardTickUnits(NumberAxis.createStandardTickUnits());//Y轴显示整数
        //设置纵坐标值的间距为10
        numberaxis.setTickUnit(new NumberTickUnit(0.80));
        numberaxis.setRangeWithMargins(0, 10);
        numberaxis.setTickMarkOutsideLength((float) 1);
        numberaxis.setTickMarkInsideLength((float) 1);
        // 其他设置 参考 CategoryPlot类  
        LineAndShapeRenderer renderer = (LineAndShapeRenderer)plot.getRenderer(); 
        renderer.setBaseShapesVisible(true); // series 点(即数据点)可见  
        renderer.setBaseLinesVisible(true); // series 点(即数据点)间有连线可见  
        renderer.setUseSeriesOffset(true); // 设置偏移量  
        renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 
        renderer.setBaseItemLabelsVisible(false); 
        return jfreechart; 
    } 
 
    /**
     * 创建CategoryDataset对象
     * 
     */ 
    public static CategoryDataset createDataset() { 
//        String[] rowKeys = {"Antibody dilution (X1000)"}; 
//        String[] colKeys = {"1", "2", "4", "8", "16", "32", 
//                "64", "128", "256", "512"}; 
//        double[][] data = {{0.691, 2.554, 2.423, 2.283, 2.242, 2.059, 1.899, 1.518, 1.179, 0.921},}; 
        // 或者使用类似以下代码  
         DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();  
         categoryDataset.addValue(10, rowKeys, colKeys);  
//        System.out.println(data.length);
//        return DatasetUtilities.createCategoryDataset(rowKeys, colKeys, data); 
     DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
     dataSet.addValue(1, "Rabbit1", "1");
     dataSet.addValue(2, "Rabbit1", "2");
     dataSet.addValue(3, "Rabbit1", "4");
     dataSet.addValue(4, "Rabbit1", "8");
     dataSet.addValue(5, "Rabbit1", "16");
     dataSet.addValue(6, "Rabbit1", "32");
     dataSet.addValue(7, "Rabbit1", "64");
     dataSet.addValue(7, "Rabbit1", "128");
     dataSet.addValue(8, "Rabbit1", "256");
     dataSet.addValue(9, "Rabbit1", "512");
     dataSet.addValue(10, "Rabbit2", "1");
     dataSet.addValue(0, "Rabbit2", "2");
     dataSet.addValue(9, "Rabbit2", "4");
     dataSet.addValue(6, "Rabbit2", "8");
     dataSet.addValue(4, "Rabbit2", "16");
     dataSet.addValue(6, "Rabbit2", "32");
     dataSet.addValue(9, "Rabbit2", "64");
     dataSet.addValue(3, "Rabbit2", "128");
     dataSet.addValue(2, "Rabbit2", "256");
     dataSet.addValue(6, "Rabbit2", "512");
     return dataSet;
    } 

转载于:https://www.cnblogs.com/VicRuan/archive/2013/04/08/3007561.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值