JFreeChart簡介及使用

1.所需jar包

JFreeChart1.0.18.jar
jcommon-1.0.22.jar

下載連接 jar包html

2.JFreeChart架構

類層次架構數據庫

類層次架構解釋瞭如何把不一樣階層的相互庫交互,以建立不一樣類型的圖表。api

類層次架構 - 單元 - 描述 - 文件 - 所用的用戶輸入爲源,用於建立該文件中的數據集。 - 數據庫 - 所用的用戶輸入爲源,用於建立在數據庫中的數據集。 - 建立數據集 - 接受數據集中存儲和數據集中到數據集對象。
- 通用數據集 - 這種類型的數據集主要用於餅圖。 - 分類數據集 - 這種類型的數據集,用於柱狀圖,折線圖等等。 - 系列數據集 - 這種類型的數據集被用於存儲一系列數據和構建線圖表。 - 系列採集數據集 - 不一樣類別的一系列數據集添加系列集合數據集。這種類型的數據集,用於xy折線圖表。 - 建立圖表 - 這是被執行以建立最終的圖表的方法。 - 幀、圖片 - 該圖顯示在一個Swing框架或建立映像。 應用層框架架構

應用層框架

3.JFreeChart API

JFreeChart API框架

4.生成各類圖表的圖片代碼

Jfreechart打造專業漂亮圖表dom

4.1生成餅狀圖
ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());

        DefaultPieDataset data = new DefaultPieDataset();
        // 餅狀圖分割數據
        data.setValue("使用率", 40);
        data.setValue("未使用率", 60);

        JFreeChart chart = ChartFactory.createPieChart(
                            title,   //標題
                            data,    //數據
                            true,    //是否生成圖例
                            true,    //是否生成工具
                            false);  //是否生成連接
    
        // 圖例標題
        LegendTitle lt = chart.getLegend();
        // 字體設定
        Font font = new Font(FONT_MSGOTHIC, Font.PLAIN, 13);
        lt.setItemFont(font);
        // 標題的外邊框設定
        chart.setBorderVisible(false);
        // 背景色設定
        chart.setBackgroundPaint(Color.WHITE);
        if ( title != null ) {
            chart.getTitle().setFont( new Font( FONT_MSGOTHIC, Font.PLAIN, 14 ) );
        }

        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setBackgroundPaint(Color.WHITE);
        plot.setInteriorGap(0.03);
        // 標題的內框設定
        plot.setOutlineVisible(false);

        // 每一個圖例的顏色設定
        plot.setSectionPaint(data.getKey(0), new Color(255, 201, 14));
        plot.setSectionPaint(data.getKey(1), new Color(144, 160, 255));

        plot.setLabelLinksVisible(false);
        plot.setSimpleLabels(true);
        plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{2}"));
        plot.setLabelPaint(Color.BLACK);
        plot.setLabelBackgroundPaint(null);
        plot.setLabelOutlineStroke(null);
        plot.setShadowGenerator(new DefaultShadowGenerator(1, Color.WHITE, 1f, 0, 0d));
        plot.setShadowPaint(null);

        // 圖例位置 邊框設定
        LegendTitle legend = chart.getLegend();
        legend.setPosition(RectangleEdge.RIGHT);
        legend.setBorder(0, 0, 0, 0);

        // 輸出方式1:PNG文件
        ChartUtilities.saveChartAsPNG(imgFile, chart, width, height);
        
        // 輸出方式2:流,經過response傳送到jsp頁面
	response.setContentType("image/png");
	ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart, 210, 80);
	response.getOutputStream().flush();
4.2生成柱狀圖
ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());

        DefaultCategoryDataset data = new DefaultCategoryDataset();
        data.addValue(
                    value1,    //柱狀圖的數值
                      str1,   //某一個分類的柱狀圖名字
                      str2   //某一分類名字
         );

        JFreeChart chart = ChartFactory.createBarChart(
                        title,   //柱狀圖標題
                        null,    //橫軸標題
                        null,    //縱軸標題
                        data,    //數據
  PlotOrientation.HORIZONTAL,    //圖表方向:橫向
                        false,   //是否生成圖例
                        true,    //是否生成工具
                        false    //是否生成連接
        );
        // 標題外邊框線是否顯示
        chart.setBorderVisible(false);
        // 圖表的背景色
        chart.setBackgroundPaint(Color.WHITE);
        if ( title != null ) {
            chart.getTitle().setFont( new Font( FONT_MSGOTHIC, Font.PLAIN, 14 ) );
        }

        //獲取繪圖區對象
        CategoryPlot plot = chart.getCategoryPlot();
        plot.setBackgroundPaint(Color.WHITE);
        plot.setInteriorGap(0.03);
        plot.setOutlineVisible(false);   //>>> 內邊線設定
        plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);  //>>> 軸的位置設定

        // 橫軸相關設定
        CategoryAxis cAxis = plot.getDomainAxis();
        cAxis.setTickLabelFont(new Font(FONT_MSGOTHIC, Font.PLAIN, 10));

        // 縱軸相關設定
        ValueAxis vAxis = plot.getRangeAxis();
        vAxis.setTickLabelFont(new Font(FONT_MSGOTHIC, Font.PLAIN, 11));

        // bar的設定
        BarRenderer renderer = (BarRenderer) plot.getRenderer();
        renderer.setDrawBarOutline(false);
        renderer.setShadowVisible(false);
        renderer.setItemMargin(0);  //>>> Category間的分割距離

        // 柱的寬度(ItemMargin優先)
        double barWidth = 0.08;
        switch (size) {
        case 1:
            barWidth = 0.45; break;
        case 2:
            barWidth = 0.25; break;
        }
        renderer.setMaximumBarWidth(barWidth);

        // 每一個柱子的顏色設定
        renderer.setSeriesPaint(0, new Color(255, 201, 14));
        renderer.setSeriesPaint(1, new Color(255, 174, 201));

        // 橫軸的設定
        CategoryAxis domAxis = plot.getDomainAxis();
        domAxis.setLowerMargin(0.04); 
        domAxis.setUpperMargin(0.04); 
        // 間隔設定
        domAxis.setCategoryMargin(0.08);
        // 文字的角度
        domAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0));
        // label最大行數
        if (strgData.size() < 4)
            domAxis.setMaximumCategoryLabelLines(2);
        else
            domAxis.setMaximumCategoryLabelLines(1);
        
        domAxis.setMaximumCategoryLabelWidthRatio(0.4f);

        // 縱軸設定
        NumberAxis valueAxis = (NumberAxis)plot.getRangeAxis();
        valueAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());  //>>> 固定整數
        valueAxis.setAutoRange(false); //>>> 值軸的範圍
        valueAxis.setRange(0, 100);

        // 輸出方式1:PNG文件
        ChartUtilities.saveChartAsPNG(imgFile, chart, width, height);
        
        // 輸出方式2:流,經過response傳送到jsp頁面
	response.setContentType("image/png");
	ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart, 210, 80);
	response.getOutputStream().flush();
4.3生成折線圖
ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());

        DefaultCategoryDataset data = new DefaultCategoryDataset();
        data.addValue(
                    value1,    //值域的數值
                      str1,   //某一折線的名字
                      str2   //範圍域的值
         );

        JFreeChart chart = ChartFactory.createLineChart(
                        title,   //折線圖標題
                        null,    //橫軸標題
                        null,    //縱軸標題
                        data,    //數據
  PlotOrientation.HORIZONTAL,    //圖表方向:橫向
                        false,   //是否生成圖例
                        true,    //是否生成工具
                        false    //是否生成連接
        );
        // 標題外邊框
        chart.setBorderVisible(false);
        // 背景色設定
        chart.setBackgroundPaint(Color.WHITE);
        if ( title != null ) {
            chart.getTitle().setFont( new Font( FONT_MSGOTHIC, Font.PLAIN, 14 ) );
        }

        //獲取繪圖區域
        CategoryPlot plot = chart.getCategoryPlot();
        plot.setBackgroundPaint(Color.WHITE);
        plot.setOutlineVisible(false);  //>>> 標題內邊線設定
        plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT); //>>> 軸的位置設定

        // 橫軸設定
        CategoryAxis cAxis = plot.getDomainAxis();
        cAxis.setTickLabelFont(new Font(FONT_MSGOTHIC, Font.PLAIN, 10)); //字體設定

        // 縱軸設定
        ValueAxis vAxis = plot.getRangeAxis();
        vAxis.setTickLabelFont(new Font(FONT_MSGOTHIC, Font.PLAIN, 11)); //字體設定

        // 橫軸設定
        CategoryAxis domAxis = plot.getDomainAxis();  
    domAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0));  // label文字角度

         // 輸出方式1:PNG文件
        ChartUtilities.saveChartAsPNG(imgFile, chart, width, height);
        
        // 輸出方式2:流,經過response傳送到jsp頁面
	response.setContentType("image/png");
	ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart, 210, 80);
	response.getOutputStream().flush();
相關文章
相關標籤/搜索