Javafx-stacked-bar-chart

提供:Dev Guides
移動先:案内検索

JavaFX-積み上げ棒グラフ

StackedBarChartは、BarChartのバリエーションであり、カテゴリのデータ値を示すバーをプロットします。 カテゴリ軸である軸に応じて、バーは垂直または水平になります。 各シリーズのバーは、前のシリーズの上に積み上げられています。

以下は積み上げ棒グラフで、人口の増加を表しています。

積み上げ棒グラフ

JavaFXでは、積み上げ棒グラフは StackedBarChart という名前のクラスで表されます。 このクラスは、パッケージ javafx.scene.chart に属します。 このクラスをインスタンス化することにより、JavaFXでStackedBarChartノードを作成できます。

積み上げ棒グラフを生成する手順

JavaFXで積み上げ横棒グラフを生成するには、以下の手順に従います。

ステップ1:クラスを作成する

Javaクラスを作成し、パッケージ javafx.applicationApplication クラスを継承します。 次に、このクラスの* start()*メソッドを次のように実装できます。

public class ClassName extends Application {
   @Override
   public void start(Stage primaryStage) throws Exception {
   }
}

ステップ2:軸の定義

積み上げ棒グラフのX軸とY軸を定義し、それらにラベルを設定します。 この例では、X軸は大陸を表し、y軸は人口を百万単位で表します。

//Defining the x axis
CategoryAxis xAxis = new CategoryAxis();

xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList
   ("Africa", "America", "Asia", "Europe", "Oceania")));
xAxis.setLabel("category");

//Defining the y axis
NumberAxis yAxis = new NumberAxis();
yAxis.setLabel("Population (In millions)");

ステップ3:積み上げ棒グラフの作成

パッケージ javafx.scene.chartStackedBarChart という名前のクラスをインスタンス化して、折れ線グラフを作成します。 このクラスのコンストラクターに、前の手順で作成したX軸とY軸を表すオブジェクトを渡します。

//Creating the Bar chart
StackedBarChart<String, Number> stackedBarChart =
new StackedBarChart<>(xAxis, yAxis);
stackedBarChart.setTitle("Historic World Population by Region");

ステップ4:データの準備

*XYChart.Series* クラスをインスタンス化し、次のようにこのクラスのObservableリストにデータ(一連のx、y座標)を追加します-
//Prepare XYChart.Series objects by setting data
XYChart.Series<String, Number> series1 = new XYChart.Series<>();
series1.setName("1800");
series1.getData().add(new XYChart.Data<>("Africa", 107));
series1.getData().add(new XYChart.Data<>("America", 31));
series1.getData().add(new XYChart.Data<>("Asia", 635));
series1.getData().add(new XYChart.Data<>("Europe", 203));
series1.getData().add(new XYChart.Data<>("Oceania", 2));
XYChart.Series<String, Number> series2 = new XYChart.Series<>();

series2.setName("1900");
series2.getData().add(new XYChart.Data<>("Africa", 133));
series2.getData().add(new XYChart.Data<>("America", 156));
series2.getData().add(new XYChart.Data<>("Asia", 947));
series2.getData().add(new XYChart.Data<>("Europe", 408));
series1.getData().add(new XYChart.Data<>("Oceania", 6));

XYChart.Series<String, Number> series3 = new XYChart.Series<>();
series3.setName("2008");
series3.getData().add(new XYChart.Data<>("Africa", 973));
series3.getData().add(new XYChart.Data<>("America", 914));
series3.getData().add(new XYChart.Data<>("Asia", 4054));
series3.getData().add(new XYChart.Data<>("Europe", 732));
series1.getData().add(new XYChart.Data<>("Oceania", 34));

ステップ5:積み上げ棒グラフにデータを追加する

次のように、前の手順で準備したデータ系列を棒グラフに追加します-

//Setting the data to bar chart
stackedBarChart.getData().addAll(series1, series2, series3);

ステップ6:グループオブジェクトの作成

  • start()メソッドで、 *Group という名前のクラスをインスタンス化してグループオブジェクトを作成します。 これはパッケージ javafx.scene に属します。

前の手順で作成したStackedBarChart(ノード)オブジェクトをパラメーターとしてGroupクラスのコンストラクターに渡します。 これは、次のようにグループに追加するために行う必要があります-

Group root = new Group(stackedBarChart);

ステップ7:シーンオブジェクトの作成

パッケージ javafx.scene に属する Scene という名前のクラスをインスタンス化して、シーンを作成します。 このクラスに、前の手順で作成したグループオブジェクト(ルート)を渡します。

ルートオブジェクトに加えて、画面の高さと幅を表す2つのdoubleパラメータを、Groupクラスのオブジェクトとともに次のように渡すこともできます。

Scene scene = new Scene(group ,600, 300);

ステップ8:ステージのタイトルを設定する

*Stage* クラスの* setTitle()*メソッドを使用して、ステージにタイトルを設定できます。 この *primaryStage* はStageオブジェクトであり、シーンクラスのstartメソッドにパラメーターとして渡されます。
*primaryStage* オブジェクトを使用して、シーンのタイトルを次のように *Sample Application* として設定します。
primaryStage.setTitle("Sample Application");

ステップ9:ステージにシーンを追加する

Stageという名前のクラスの* setScene()*メソッドを使用して、Sceneオブジェクトをステージに追加できます。 この方法を使用して、前の手順で準備したSceneオブジェクトを次のように追加します。

primaryStage.setScene(scene);

ステップ10:ステージのコンテンツを表示する

次のように Stage クラスの* show()*という名前のメソッドを使用して、シーンのコンテンツを表示します。

primaryStage.show();

ステップ11:アプリケーションの起動

次のように、メインメソッドから Application クラスの* launch()*静的メソッドを呼び出して、JavaFXアプリケーションを起動します。

public static void main(String args[]){
   launch(args);
}

次の表は、1800年、1900年、2008年のさまざまな大陸の人口を示しています。

Africa America Asia Europe Oceania
1800 107 31 635 203 2
1900 133 156 947 408 6
2008 973 914 4054 732 34

以下は、JavaFXを使用して、上記のデータを示す積み上げ棒グラフを生成するJavaプログラムです。

このコードを StackedBarChartExample.java という名前のファイルに保存します。

import java.util.Arrays;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.stage.Stage;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.StackedBarChart;
import javafx.scene.chart.XYChart;

public class StackedBarChartExample extends Application {
   @Override
   public void start(Stage stage) {
     //Defining the axes
      CategoryAxis xAxis = new CategoryAxis();
      xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList
         ("Africa", "America", "Asia", "Europe", "Oceania")));

      xAxis.setLabel("category");
      NumberAxis yAxis = new NumberAxis();
      yAxis.setLabel("Population (In millions)");

     //Creating the Bar chart
      StackedBarChart<String, Number> stackedBarChart =
         new StackedBarChart<>(xAxis, yAxis);
      stackedBarChart.setTitle("Historic World Population by Region");

     //Prepare XYChart.Series objects by setting data
      XYChart.Series<String, Number> series1 = new XYChart.Series<>();
      series1.setName("1800");
      series1.getData().add(new XYChart.Data<>("Africa", 107));
      series1.getData().add(new XYChart.Data<>("America", 31));
      series1.getData().add(new XYChart.Data<>("Asia", 635));
      series1.getData().add(new XYChart.Data<>("Europe", 203));
      series1.getData().add(new XYChart.Data<>("Oceania", 2));

      XYChart.Series<String, Number> series2 = new XYChart.Series<>();
      series2.setName("1900");
      series2.getData().add(new XYChart.Data<>("Africa", 133));
      series2.getData().add(new XYChart.Data<>("America", 156));
      series2.getData().add(new XYChart.Data<>("Asia", 947));
      series2.getData().add(new XYChart.Data<>("Europe", 408));
      series1.getData().add(new XYChart.Data<>("Oceania", 6));

      XYChart.Series<String, Number> series3 = new XYChart.Series<>();
      series3.setName("2008");
      series3.getData().add(new XYChart.Data<>("Africa", 973));
      series3.getData().add(new XYChart.Data<>("America", 914));
      series3.getData().add(new XYChart.Data<>("Asia", 4054));
      series3.getData().add(new XYChart.Data<>("Europe", 732));
      series1.getData().add(new XYChart.Data<>("Oceania", 34));

     //Setting the data to bar chart
      stackedBarChart.getData().addAll(series1, series2, series3);

     //Creating a Group object
      Group root = new Group(stackedBarChart);

     //Creating a scene object
      Scene scene = new Scene(root, 600, 400);

     //Setting title to the Stage
      stage.setTitle("stackedBarChart");

     //Adding scene to the stage
      stage.setScene(scene);

     //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します。

javac StackedBarChartExample.java
java StackedBarChartExample

実行時に、上記のプログラムは、以下に示すようなエリアチャートを表示するJavaFXウィンドウを生成します。

積み上げバーの例