一秒鐘教會你如何 使用jfreechart製做圖表,扇形圖,柱形圖,線型圖,時序圖,附上詳細代碼,直接看效果

     今天有小夥伴問到我怎麼使用jfreeChat生成圖標,去年就有一個這方便的的總結,今天再遇到,就總結出來,供你們參考:java

第一個:數組

建立柱狀圖,效果圖以下:

 


柱狀圖代碼以下:

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);

    }

    

}

 

第三個:線型圖,效果圖以下dom

代碼以下:工具

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);
    }
    
}

 

第四個:扇形圖,效果圖以下字體

 

代碼以下:spa

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);
    }
}

 

第五個:時序圖,效果圖以下code

代碼以下:orm

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

相關文章
相關標籤/搜索