系列1つの棒グラフを描画するサンプル
JavaFXで棒グラフを描画したいと思い、調べた結果、以下のURLにたどりつきました。
https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/bar-chart.htm
しかし、系列3つのサンプルでした。なので系列1つのサンプルを作ってみました。
以下、段階を追って説明します。
棒グラフの縦、横
棒グラフを描画するにはBarChartクラスを使います。ジェネリックスにはNumberとStringの組み合わせを書くのが基本のようです。NumberとString順序ははグラフを縦にするか、横にするかによって、変わります。また、合わせてコンストラクタの引数の順序を変えます。
BarChart<Number, String> bc = new BarChart<>(new NumberAxis(), new CategoryAxis());
BarChart<String, Number> bc = new BarChart<>(new CategoryAxis(), new NumberAxis());
以下、横の棒グラフを作成することにします。
データなし棒グラフ
データを何も持たない状態の棒グラフを描画します。BarChartのインスタンスを生成して、 Sceneクラスのコンストラクタに指定します。
package test;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.stage.Stage;
public class BarChartDefault extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
// 棒グラフを生成
BarChart<Number, String> bc = new BarChart<>(new NumberAxis(), new CategoryAxis());
Scene scene = new Scene(bc, 400, 400);
primaryStage.setTitle("棒グラフ");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
以下のように軸だけが描画されます。
データあり棒グラフ
例として、以下のグラフを描画します。学校のクラスの人数の表です。
クラス名 | 人数 |
---|---|
A | 20 |
B | 10 |
C | 30 |
package test;
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.chart.XYChart.Data;
import javafx.scene.chart.XYChart.Series;
import javafx.stage.Stage;
public class BarChartAddData extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
// 系列を生成
Series<Number, String> series = new Series<Number, String>();
series.setName("人数");
ObservableList<Data<Number, String>> list = series.getData();
list.add(new XYChart.Data<>(20, "A"));
list.add(new XYChart.Data<>(10, "B"));
list.add(new XYChart.Data<>(30, "C"));
// 棒グラフを生成
BarChart<Number, String> bc = new BarChart<>(new NumberAxis(), new CategoryAxis());
bc.getData().add(series);
Scene scene = new Scene(bc, 400, 400);
primaryStage.setTitle("棒グラフ");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
以下のようにグラフが描画されます。
categoryGapメソッド
上記のグラフは縦に太いです。画面の大きさとデータの区分の数から自動で調節されるようです。BarChartクラスにはcategoryGapというプロパティあり、異なるカテゴリのバーの間に残す間隔の値です。値を出力させた結果、10.0でした。なので、50くらうに設定してみます。setCategoryGapメソッドが用意されてますので、以下の一行を追加します。
bc.setCategoryGap(50);
以下のように、グラフが細くなりました。
getBarGapメソッド
よく見ると、ラベルの上下中央の位置とグラフがずれています。これはbarGapという値で変化します。値を出力させた結果4.0でした。なので0にします。以下の一行を追加します。
bc.setBarGap(0);
これでグラフの位置が揃いました。
Author And Source
この問題について(系列1つの棒グラフを描画するサンプル), 我々は、より多くの情報をここで見つけました https://qiita.com/java-beginner/items/d02599c0170b90ffe852著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .