jFreeChart利用CategoryDatase,ChartFactory.createBarChart生成的柱状图

package com.potevio.rnd;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;

public class CreateJFreeChartBar {   
  
    /**  
     * 创建JFreeChart Bar Chart(柱状图)  
     */  
    public static void main(String[] args) {   
        //步骤1:创建CategoryDataset对象(准备数据)   
        CategoryDataset dataset = createDataset();   
        //步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置   
        JFreeChart freeChart = createChart(dataset);   
        //步骤3:将JFreeChart对象输出到文件,Servlet输出流等   
        saveAsFile(freeChart, "F:\\jfreechart\\bar.png", 500, 400);   
    }   
       
    //保存为文件   
    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, weight, height);   
            //保存为JPEG文件   
            //ChartUtilities.writeChartAsJPEG(out, chart, weight, 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   
                }   
            }   
        }   
    }   
  
    //根据CategoryDataset生成JFreeChart对象   
    public static JFreeChart createChart(CategoryDataset categoryDataset) {   
        JFreeChart jfreechart = ChartFactory.createBarChart("Bar Chart Demo",    //标题   
                "产品",    //categoryAxisLabel (category轴,横轴,X轴的标签)   
                "数量",    //valueAxisLabel(value轴,纵轴,Y轴的标签)   
                categoryDataset, // dataset   
                PlotOrientation.VERTICAL,   
                true, // legend   
                false, // tooltips   
                false); // URLs   
           
        //以下的设置可以由用户定制,也可以省略   
        CategoryPlot  plot = (CategoryPlot) jfreechart.getPlot();   
        //背景色 透明度   
        plot.setBackgroundAlpha(0.5f);   
        //前景色 透明度   
        plot.setForegroundAlpha(0.5f);   
        //其它设置可以参考 CategoryPlot   
           
        return jfreechart;   
    }   
  
    /**  
     * 创建CategoryDataset对象  
     *   
     */  
    public static CategoryDataset createDataset() {   
           
        String []rowKeys = {"One", "Two", "Three"};   
        String []colKeys = {"1987", "1997", "2007"};   
           
        double [][] data = {   
                {50, 20, 30},   
                {20, 10D, 40D},   
                {40, 30.0008D, 38.24D},   
        };   
           
        //也可以使用以下代码   
        //DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();   
        //categoryDataset.addValue(10, "rowKey", "colKey");   
           
        return DatasetUtilities.createCategoryDataset(rowKeys, colKeys, data);           
    }   
  
}

运行效果图:

 

 

 

附上另外一份代码:

package com;

import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
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.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.ui.TextAnchor;

public class CreateJFreeChartBar3 {   
  
    public static void main(String[] args) {   
        //步骤1:创建CategoryDataset对象(准备数据)   
        CategoryDataset dataset = createDataset();   
        //步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置   
        JFreeChart freeChart = createChart(dataset);   
        //步骤3:将JFreeChart对象输出到文件,Servlet输出流等   
        saveAsFile(freeChart, "E:\\jfreechart\\batpic.png", 600, 500);   
    }   
       
    //保存为文件   
    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, weight, height);   
            //保存为JPEG文件   
            //ChartUtilities.writeChartAsJPEG(out, chart, weight, 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   
                }   
            }   
        }   
    }   
  
    //根据CategoryDataset生成JFreeChart对象   
    public static JFreeChart createChart(CategoryDataset categoryDataset) { 
    	
        JFreeChart jfreechart = ChartFactory.createBarChart("",    //标题   
                "人员",    //categoryAxisLabel (category轴,横轴,X轴的标签)   
                "次数",    //valueAxisLabel(value轴,纵轴,Y轴的标签)   
                categoryDataset, // dataset   
                PlotOrientation.VERTICAL,   
                true, // legend   
                false, // tooltips   
                false); // URLs
        TextTitle title = jfreechart.getTitle(); 
        title.setFont(new Font("宋体", Font.BOLD, 12));

        //以下的设置可以由用户定制,也可以省略   
        // 取得状图plot对象 
        CategoryPlot  plot = (CategoryPlot) jfreechart.getPlot(); 
        
        plot.setBackgroundPaint(Color.lightGray);
//    	plot.setBackgroundPaint(new Color(255, 255, 204));// 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)
    	plot.setRangeGridlinesVisible(true);// 设置横虚线可见
    	plot.setRangeGridlinePaint(Color.gray);// 虚线色彩


    	// x轴设置
    	CategoryAxis domainAxis = plot.getDomainAxis();
    	//domainAxis.setLabelFont(labelFont);// 轴标题
    	//domainAxis.setTickLabelFont(labelFont);// 轴数值
    	domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 3.0));//度倾斜
    	domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 横轴上的 Lable 是否完整显示
    	domainAxis.setLowerMargin(0.05);// 设置距离图片左端距离
    	domainAxis.setUpperMargin(0.05);// 设置距离图片右端距离
    	plot.setDomainAxis(domainAxis);  
        domainAxis.setLabelFont(new Font("宋体", Font.BOLD, 12));// X轴的标题文字字体    隶书
        domainAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 12));// X轴坐标上数值字体   
//      domainAxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45); // X轴上的Lable让其45度倾斜  .UP_45 

    	// y轴设置
    	ValueAxis rangeAxis = plot.getRangeAxis();
    	//rangeAxis.setLabelFont(labelFont);
    	//rangeAxis.setTickLabelFont(labelFont);
//    	rangeAxis.setRange(85, 100.5);//纵轴显示范围
    	rangeAxis.setAutoTickUnitSelection(true);
    	rangeAxis.setUpperMargin(0.15);// 设置最高的一个 Item 与图片顶端的距离
    	rangeAxis.setLowerMargin(0.15);// 设置最低的一个 Item 与图片底端的距离

    	//设置 柱子的提示 中文处理
    	jfreechart.getLegend().setItemFont(new Font("宋体", Font.BOLD,10));
    	
    	//plot.setRangeAxis(rangeAxis);

    	// Y轴精度
    	NumberAxis vn = (NumberAxis) plot.getRangeAxis();
    	DecimalFormat df = new DecimalFormat("#0");
    	vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式

    	rangeAxis.setAutoTickUnitSelection(true);//步长自动设置
    	rangeAxis.setStandardTickUnits(NumberAxis.createStandardTickUnits());//纵轴单元为整型
    	rangeAxis.setLabelFont(new Font("宋体", Font.BOLD, 12));// y轴的标题文字字体   
        rangeAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 12));// y轴坐标上数值字体   

    	//柱子属性
    	BarRenderer renderer = new BarRenderer();
    	renderer.setMaximumBarWidth(0.1);// 设置柱子宽度//TODO 0.05
    	renderer.setMinimumBarLength(0.2);// 设置柱子高度
    	renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱子边框颜色
    	renderer.setDrawBarOutline(true);// 设置柱子边框可见

    	//renderer.setSeriesPaint(0, new Color(51, 204, 204));// 设置柱的颜色
    	//renderer.setSeriesPaint(1, new Color(253, 204, 255));
    	 for(int i = 0 ; i < 10; i++){
    		 renderer.setSeriesPaint(i, Color.decode("#2EDE1E"));
    		 renderer.setSeriesOutlinePaint(i, Color.BLACK);
         }
    	 
    	renderer.setItemMargin(0.0);// 设置每个地区所包含的平行柱的之间距离

    	// 显示每个柱的数值,并修改该数值的字体属性
    	renderer.setIncludeBaseInRange(true);
    	renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
    	renderer.setBaseItemLabelsVisible(true);
    	renderer.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 12));// 数值字体TRUETYPE_FONT
    	renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_CENTER));//数值显示位置
    	plot.setRenderer(renderer);

    	plot.setForegroundAlpha(1.0f);// 设置柱的透明度

//    	//背景色 透明度   
//        plot.setBackgroundAlpha(0.5f);   
//        //前景色 透明度   
//        plot.setForegroundAlpha(0.5f);
        
        return jfreechart;   
    }   
  
    /**  
     * 创建CategoryDataset对象  
     *   
     */  
    public static CategoryDataset createDataset() {   
           
        String []rowKeys = {"次数"};   
        String []colKeys = {"一二", "二二", "三二","三一", "二三二",
        		            "二三三","二三五", "二三四", "二三六","一二三"};   
           
        double [][] data = {   
                {50,41,30,20,29,45,21,32,40,38}
        };   
    
        return DatasetUtilities.createCategoryDataset(rowKeys, colKeys, data);           
    }   
  
}

 

运行效果图:



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值