欢迎来到一念的实践博客园

一秒钟教会你如何 使用jfreechart制作图表,扇形图,柱形图,线型图,时序图,附上详细代码,直接看效果

     今天有小伙伴问到我怎么使用jfreeChat生成图标,去年就有一个这方便的的总结,今天再遇到,就总结出来,供大家参考:

第一个:

创建柱状图,效果图如下:

 


柱状图代码如下:

package cn.xfz.image;

import java.awt.Color;
import java.awt.Font;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;


/**
 * 创建柱状图
 * @author Administrator
 *
 */
public class CreateBarChartA {
    
    public static void main(String[] args) {
        //3D柱状图
        makeBarChar3D();
    }
    

    /**
     * 内部类 
     * 获得数据及
     * @return
     */
    public static CategoryDataset getDataset(){
        
        //定义一个数组,声明每组要显示的数据
        String [] rowKeys={"CPU","硬盘","内存"};
         //定义显示多少组
        String [] columnKeys={"惠州","上海","深圳","北京","云南"};
        
        //定义一个二维数组
        double [][] data=new double[][]{
                {100,356,524,456,42},
                {200,350,124,256,142},
                {100,156,324,406,342}
        };
        // DatasetUtilities 数据集的工具类 CategoryDataset(柱状图的数据集)
        /*CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys,data);
        
        return dataset;
        */
        
        CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
                rowKeys, columnKeys, data);
        
        return dataset;
    }
    
    /**
     * 生成立体柱状图
     */
    public static void makeBarChar3D(){
        
        String title="电脑配件3月的销售量";

        // 1.获得数据集
        CategoryDataset dataset = getDataset();
        
        JFreeChart chart = ChartFactory.createBarChart3D(title, 
                 
                "配件",     //目录轴显示的标签
                "销量",  //数值轴显示的标签
                dataset,
                PlotOrientation.VERTICAL, //图表显示的方向
                true, //是否生成图例
                true, //是否生成工具提示
                true //是否生成链接路径
            );
        
        
        //设置标题字体
        Font font = new Font("宋体",Font.BOLD,18);
        TextTitle textTitle = new TextTitle();
        textTitle.setFont(font);
        
        chart.setTitle(textTitle);
        
        
        //设置背景颜色RGB格式
        chart.setBackgroundPaint(new Color(255,255,255));
        
        //获得柱状图的plot对象
        CategoryPlot plot = chart.getCategoryPlot();
        
        //取得X轴
        CategoryAxis categoryAxis = plot.getDomainAxis();
        //设置X轴显示的标签的字体
        categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 16));
        //设置X轴标记的字体
        categoryAxis.setTickLabelFont(new Font("宋体",Font.TRUETYPE_FONT,16));
        
        //取得Y轴
        ValueAxis rangeAxis = plot.getRangeAxis();
        //设置Y轴显示的标签的字体
        rangeAxis.setLabelFont(new Font("宋体", Font.BOLD, 16));
        
        
        //获得legend
        LegendTitle legend = chart.getLegend();
        legend.setItemFont(new Font("宋体", Font.BOLD, 16));
        
        //创建图标的窗体
        ChartFrame frame = new ChartFrame(title, chart, true);
        //窗体大小设置为自动适应
        frame.pack();
        //设置为可见
        frame.setVisible(true);
        
    }
}

第二个:字体设置后的柱状图 ,效果图如下:

 

 代码如下:

package cn.xfz.image;


import java.awt.Color;
import java.awt.Font;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;

/**
 * 创建柱状图
 * */
public class CreateBarcharB {
    
    public static void main(String[] args) {
        //3D柱状图
        makeBarChart3D();
    }
    /**
     * 获得数据集。
     * 
     * @return org.jfree.data.category.CategoryDataset
     */
    private static CategoryDataset getDataset() {
        // 定义一个数组声明每组需要体现的数据
        String[] rowKeys = { "CPU", "硬盘", "内存" };
        // 定义有多少组
        String[] columnKeys = { "北京", "上海", "广州", "南京", "深圳" };

        // 各个组的数据
        double[][] data = new double[][] { { 751, 800, 260, 600, 200 },
                { 400, 560, 240, 300, 150 }, { 600, 450, 620, 220, 610 } };
        // DatasetUtilities 数据集的工具类 CategoryDataset(柱状图的数据集)
        CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
                rowKeys, columnKeys, data);

        return dataset;
    }

    /**
     * 在工厂里直接设置字体
     * 生成柱状图。
     */
    public static void makeBarChart3D() {
    
        String title = "电脑配件三月销量";

        // 1.获得数据集
        CategoryDataset dataset = getDataset();
        
        //处理中文乱码
        StandardChartTheme chartTheme = new StandardChartTheme("CN");
        //标题
        chartTheme.setExtraLargeFont(new Font("宋体",Font.PLAIN,16));
        //图例
        chartTheme.setRegularFont(new Font("宋体",Font.PLAIN,16));
        //轴向字体
        chartTheme.setLargeFont(new Font("宋体",Font.PLAIN,16));
        
        ChartFactory.setChartTheme(chartTheme);
        
        
        
        // 2.创建一个柱状图
        JFreeChart chart = ChartFactory.createBarChart3D(title, // 图表标题
                "配件", // 目录轴的显示标签
                "销量", // 数值轴的显示标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例 legend
                true, // 是否生成工具(提示) 提示
                true // 是否生成URL链接
                );

        // 创建图表的窗体
        ChartFrame frame = new ChartFrame(title, chart, true);
        // 窗体的大小设置为自适应
        frame.pack();
        // 设置为可见
        frame.setVisible(true);

    }

    

}

 

第三个:线型图,效果图如下

代码如下:

package cn.xfz.image;

import java.awt.Font;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;

/**
 * 创建线型图
 *
 */
public class CreateLineChart {

    public static void main(String[] args) {
        //折线图
        makeLineChart();
    }
    
    /**
     * 获得数据集。
     * 
     * @return org.jfree.data.category.CategoryDataset
     */
    private static CategoryDataset getDataset() {
        // 定义一个数组声明每组需要体现的数据
        String[] rowKeys = { "CPU", "硬盘", "内存" };
        // 定义有多少组
        String[] columnKeys = { "北京", "上海", "广州", "南京", "深圳" };

        // 各个组的数据
        double[][] data = new double[][] { { 751, 800, 260, 600, 200 },
                { 400, 560, 240, 300, 150 }, { 600, 450, 620, 220, 610 } };
        // DatasetUtilities 数据集的工具类 CategoryDataset(柱状图的数据集)
        CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
                rowKeys, columnKeys, data);

        return dataset;
    }
    
    /**
     * 生成折现图
     */
    public static void makeLineChart(){
        String title = "电脑配件三月销量";

        // 1.获得数据集
        CategoryDataset dataset = getDataset();
        
        //处理中文乱码
        StandardChartTheme chartTheme = new StandardChartTheme("CN");
        //标题
        chartTheme.setExtraLargeFont(new Font("宋体",Font.PLAIN,16));
        //图例
        chartTheme.setRegularFont(new Font("宋体",Font.PLAIN,16));
        //轴向字体
        chartTheme.setLargeFont(new Font("宋体",Font.PLAIN,16));
        
        ChartFactory.setChartTheme(chartTheme);
        
        JFreeChart chart = ChartFactory.createLineChart(title,
                "配件", // 目录轴的显示标签
                "销量", // 数值轴的显示标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true, // 是否显示图例 legend
                true, // 是否生成工具(提示) 提示
                false // 是否生成URL链接
                );
        
        // 创建图表的窗体
        ChartFrame frame = new ChartFrame(title, chart, true);
        // 窗体的大小设置为自适应
        frame.pack();
        // 设置为可见
        frame.setVisible(true);
    }
    
}

 

第四个:扇形图,效果图如下

 

代码如下:

package cn.xfz.image;

import java.awt.Font;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.data.general.DefaultPieDataset;

/**
 * 生成扇形图
 *
 */
public class CreatePieChart {
    
    public static void main(String[] args) {
        //生成扇形图
        makePieChart3D();
    }

    /**
     * 获取结果集
     * @return
     */
    public static DefaultPieDataset getDataset(){
        
        DefaultPieDataset dataset = new DefaultPieDataset();
        
        dataset.setValue("研发人员", 35);
        dataset.setValue("市场策划人员", 10);
        dataset.setValue("市场推广人员", 25);
        dataset.setValue("网络维护人员", 5);
        dataset.setValue("财务人员", 15);
        
        return dataset;
        
    }
    
    
    /**
     * 生成扇形图
     */
    public static void makePieChart3D(){
        
        String title = "各部门人员比例";
        // 获得数据集   
        DefaultPieDataset dataset = getDataset();
        
        // 处理中文乱码
        StandardChartTheme chartTheme = new StandardChartTheme("CN");
        // 标题
        chartTheme.setExtraLargeFont(new Font("宋体", Font.BOLD, 20));
        // legend
        chartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 18));
        // 轴向字体
        chartTheme.setLargeFont(new Font("宋体", Font.PLAIN, 16));
        ChartFactory.setChartTheme(chartTheme);
        
        JFreeChart chart = ChartFactory.createPieChart3D(
                title, //标题
                dataset,     // 图表数据集   
                true,         // 是否显示图例   
                false,         // 是否生成工具(提示)   
                false         // 是否生成URL链接  
                );
        
        // 创建图表的窗体
        ChartFrame frame = new ChartFrame(title, chart, true);
        // 窗体的大小设置为自适应
        frame.pack();
        // 设置为可见
        frame.setVisible(true);
    }
}

 

第五个:时序图,效果图如下

代码如下:

package cn.xfz.image;

import java.awt.Font;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;

import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;

public class CreateTimeSeriesChart {
    public static void makeTimeSeriesChart() {
        // 实例化TimeSeries对象
        TimeSeries timeseries = new TimeSeries("Data");
        
        // 实例化Day
        Day day = new Day(1,1,2009);
        double d = 3000D;
        // 添加一年365天的数据
        for(int i = 0 ; i < 365 ; i++){
            // 创建随机数据
            d = d+(Math.random() - 0.5) * 10;
            
            // 向数据集合中添加数据
            timeseries.add(day,d);
            
            day = (Day)day.next();//下一天
        }
        
        // 创建TimeSeriesCollection集合对象(数据集)
        TimeSeriesCollection dataset = new TimeSeriesCollection(timeseries);
    
        // 处理中文乱码
        StandardChartTheme chartTheme = new StandardChartTheme("CN");
        // 标题
        chartTheme.setExtraLargeFont(new Font("宋体", Font.BOLD, 20));
        // legend
        chartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 18));
        // 轴向字体
        chartTheme.setLargeFont(new Font("宋体", Font.PLAIN, 16));
        ChartFactory.setChartTheme(chartTheme);
        
        // 生成时序图   
        JFreeChart chart = ChartFactory.createTimeSeriesChart("上证指数时序图",//标题
                "日期",    //时间轴标签
                "指数",    //数据轴标签
                dataset,//数据集合                
                true,    //是否显示图例标识
                true,    //是否显示tooltips
                false);    //是否支持超链接
        
        ChartFrame cf = new ChartFrame("时序图", chart);
        cf.pack();
        cf.setVisible(true);
    }
    public static void main(String[] args) {
        // 时序图   
        makeTimeSeriesChart();
    }

}

 

今天就到这了,也没有太多的废话,不懂得朋友直接@我微信:qh2827

posted @ 2017-10-23 15:02  红早  阅读(2258)  评论(0编辑  收藏  举报
你好,感谢您的支持!