使用JFreeChart-建立組合圖(之CombinedCategoryPlot)

以前基本圖,例如餅圖,柱狀圖,曲線圖已經單個作了總結了,如今要將這些圖形組合起來,通常業務也是須要這些組合起來的圖形的。 java

顯示介紹如何建立柱狀圖與曲線圖結合起來的圖形。 dom

  • 首先,仍是須要獲取dataset數據源,這麼是兩個數據源,都是DefaultCategoryDataset類型的
public static CategoryDataset createDataset1() {
        DefaultCategoryDataset result = new DefaultCategoryDataset();
        String series1 = "First";
        String series2 = "Second";
        String type1 = "Type 1";
        String type2 = "Type 2";
        String type3 = "Type 3";
        String type4 = "Type 4";
        String type5 = "Type 5";
        String type6 = "Type 6";
        String type7 = "Type 7";
        String type8 = "Type 8";

        result.addValue(1.0, series1, type1);
        result.addValue(4.0, series1, type2);
        result.addValue(3.0, series1, type3);
        result.addValue(5.0, series1, type4);
        result.addValue(5.0, series1, type5);
        result.addValue(7.0, series1, type6);
        result.addValue(7.0, series1, type7);
        result.addValue(8.0, series1, type8);

        result.addValue(5.0, series2, type1);
        result.addValue(7.0, series2, type2);
        result.addValue(6.0, series2, type3);
        result.addValue(8.0, series2, type4);
        result.addValue(4.0, series2, type5);
        result.addValue(4.0, series2, type6);
        result.addValue(2.0, series2, type7);
        result.addValue(1.0, series2, type8);
        
        return result;
    }
public static CategoryDataset createDataset2() {

        DefaultCategoryDataset result = new DefaultCategoryDataset();

        String series1 = "Third";
        String series2 = "Fourth";

        String type1 = "Type 1";
        String type2 = "Type 2";
        String type3 = "Type 3";
        String type4 = "Type 4";
        String type5 = "Type 5";
        String type6 = "Type 6";
        String type7 = "Type 7";
        String type8 = "Type 8";

        result.addValue(11.0, series1, type1);
        result.addValue(14.0, series1, type2);
        result.addValue(13.0, series1, type3);
        result.addValue(15.0, series1, type4);
        result.addValue(15.0, series1, type5);
        result.addValue(17.0, series1, type6);
        result.addValue(17.0, series1, type7);
        result.addValue(18.0, series1, type8);

        result.addValue(15.0, series2, type1);
        result.addValue(17.0, series2, type2);
        result.addValue(16.0, series2, type3);
        result.addValue(18.0, series2, type4);
        result.addValue(14.0, series2, type5);
        result.addValue(14.0, series2, type6);
        result.addValue(12.0, series2, type7);
        result.addValue(11.0, series2, type8);

        return result;

    }
  • 而後,就須要咱們去畫組合圖形了,對於組合圖形所使用到的JfreeChart比較特殊,並非經過chaetFactory建立的,而是就是JFreeChart自己。
JFreeChart result = new JFreeChart(
            String title, Font titleFont, Plot plot, boolean createLegend
        );

咱們只須要傳遞Plot對象就能夠了。 spa

如今須要咱們將兩個dataset組合成一個plot對象。要怎麼作呢??? code

咱們先看看須要生成的圖片的樣式: 對象


在圖中咱們能夠發現,兩個圖表是共享一個橫座標的,所以,在建立數據源的時候,要主要將橫座標一項寫成相同才行的。 圖片

接下來咱們的任何就是建立兩個縱座標,而後將兩個縱座標合併成一個。 it

在這裏咱們使用的是CombinedDomainCategoryPlot類來合併兩個縱座標。 class

//建立數據源一的縱座標對象。
NumberAxis rangeAxis1 = new NumberAxis("Value");
LineAndShapeRenderer renderer1 = new LineAndShapeRenderer();
//咱們在這裏將橫座標設置爲NULL,表示不使用本身的橫座標對象,只使用本身的縱座標和圖表渲染對象(折線圖)
CategoryPlot subplot1 = new CategoryPlot(dataset1, null, rangeAxis1, 
                renderer1);

//縱座標對象。
NumberAxis rangeAxis2 = new NumberAxis("Value");
//柱狀圖的圖表渲染對象。
BarRenderer renderer2 = new BarRenderer();
//一樣的不是用橫座標對象。
CategoryPlot subplot2 = new CategoryPlot(dataset2, null, rangeAxis2, 
                renderer2);

  • 接着。咱們建立橫座標對象

CategoryAxis domainAxis = new CategoryAxis("Category");
  • 而後,咱們使用合併對象CombinedDomainCategoryPlot合併這些對象。

//先合併橫座標。
CombinedDomainCategoryPlot plot = new CombinedDomainCategoryPlot(
                domainAxis);
//添加縱座標。
        plot.add(subplot1, 2);
//添加縱座標。
        plot.add(subplot2, 1);
  • 最後,咱們使用JFreeChart類建立一個對象就能夠了;

JFreeChart result = new JFreeChart(
            "Combined Domain Category Plot Demo",
            new Font("SansSerif", Font.BOLD, 12),
            plot,
            true
        );
這樣就能夠生成一個組合圖形了。。。
相關文章
相關標籤/搜索