javafx
チャート
サーチ…
円グラフ
PieChart
クラスは、スライスに分割された円の形式でデータを描画します。すべてのスライスは、特定の値に対する割合(パーツ)を表します。円グラフデータは、 PieChart.Data
オブジェクトにラップされます。各PieChart.Data
オブジェクトには、パイスライスの名前と対応する値の2つのフィールドがあります。
コンストラクタ
円グラフを作成するには、 PieChart
クラスのオブジェクトを作成する必要があります。 2つのコンストラクタが処分されます。そのうちの1つは、データがsetData
メソッドで設定されていない限り、何も表示されない空のグラフを作成します。
PieChart pieChart = new PieChart(); // Creates an empty pie chart
もう1つはPieChart.Data
ObservableList
をパラメータとして渡す必要があります。
ObservableList<PieChart.Data> valueList = FXCollections.observableArrayList(
new PieChart.Data("Cats", 50),
new PieChart.Data("Dogs", 50));
PieChart pieChart(valueList); // Creates a chart with the given data
データ
スライスサイズはすべての値の合計に比例して計算されるため、パイスライスの値は必ずしも100になる必要はありません。
データエントリがリストに追加される順序によって、チャート上の位置が決定されます。デフォルトでは時計回りに配置されますが、この動作は逆になります。
pieChart.setClockwise(false);
例
次の例では、単純な円グラフを作成します。
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
Pane root = new Pane();
ObservableList<PieChart.Data> valueList = FXCollections.observableArrayList(
new PieChart.Data("Android", 55),
new PieChart.Data("IOS", 33),
new PieChart.Data("Windows", 12));
// create a pieChart with valueList data.
PieChart pieChart = new PieChart(valueList);
pieChart.setTitle("Popularity of Mobile OS");
//adding pieChart to the root.
root.getChildren().addAll(pieChart);
Scene scene = new Scene(root, 450, 450);
primaryStage.setTitle("Pie Chart Demo");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
出力:
対話式円グラフ
デフォルトでは、 PieChart
はイベントを処理しませんが、各スライスがJavaFX Node
であるため、この動作は変更できます。
下の例では、データを初期化してグラフに割り当てた後、通常は隠されている値をユーザーに提示できるように、各スライスにツールチップを追加してデータセットを反復処理します。
ObservableList<PieChart.Data> valueList = FXCollections.observableArrayList(
new PieChart.Data("Nitrogen", 7809),
new PieChart.Data("Oxygen", 2195),
new PieChart.Data("Other", 93));
PieChart pieChart = new PieChart(valueList);
pieChart.setTitle("Air composition");
pieChart.getData().forEach(data -> {
String percentage = String.format("%.2f%%", (data.getPieValue() / 100));
Tooltip toolTip = new Tooltip(percentage);
Tooltip.install(data.getNode(), toolTip);
});
折れ線グラフ
LineChart
クラスは、データを直線で接続された一連のデータポイントとして表示します。各データポイントはXYChart.Data
オブジェクトにラップされ、データポイントはXYChart.Series
グループ化されXYChart.Series
。
各XYChart.Data
オブジェクトには、チャート上のxとyの値に対応するgetXValue
とgetYValue
を使用してアクセスできる2つのフィールドがあります。
XYChart.Data data = new XYChart.Data(1,3);
System.out.println(data.getXValue()); // Will print 1
System.out.println(data.getYValue()); // Will print 3
軸
LineChart
を作成する前に、その軸を定義する必要があります。たとえば、 NumberAxis
クラスのデフォルトで引数のないコンストラクタは、使用準備ができており、これ以上設定する必要のない自動レンジング軸を作成します。
Axis xAxis = new NumberAxis();
例
以下の完全な例では、同じグラフに表示される2つの一連のデータを作成します。軸のラベル、範囲、ティック値は明示的に定義されています。
@Override
public void start(Stage primaryStage) {
Pane root = new Pane();
// Create empty series
ObservableList<XYChart.Series> seriesList = FXCollections.observableArrayList();
// Create data set for the first employee and add it to the series
ObservableList<XYChart.Data> aList = FXCollections.observableArrayList(
new XYChart.Data(0, 0),
new XYChart.Data(2, 6),
new XYChart.Data(4, 37),
new XYChart.Data(6, 82),
new XYChart.Data(8, 115)
);
seriesList.add(new XYChart.Series("Employee A", aList));
// Create data set for the second employee and add it to the series
ObservableList<XYChart.Data> bList = FXCollections.observableArrayList(
new XYChart.Data(0, 0),
new XYChart.Data(2, 43),
new XYChart.Data(4, 51),
new XYChart.Data(6, 64),
new XYChart.Data(8, 92)
);
seriesList.add(new XYChart.Series("Employee B", bList));
// Create axes
Axis xAxis = new NumberAxis("Hours worked", 0, 8, 1);
Axis yAxis = new NumberAxis("Lines written", 0, 150, 10);
LineChart chart = new LineChart(xAxis, yAxis, seriesList);
root.getChildren().add(chart);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}