非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

JavaFXでグラフ作成(棒グラフ/折れ線グラフ/散布図)

   

JavaFXでグラフ作成できるコントロールがあるとのことで試してみました。結論から言うとめちゃめちゃ使いやすいです。

[ad#top-1]

棒グラフ

棒グラフはこんな感じです。

 

ソースコードは以下の通り。BarChartTestクラスを使います。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class BarChartTest extends Application {

  @Override
  public void start(Stage stage) throws Exception {
    stage.setTitle("Chartテスト");
    CategoryAxis x = new CategoryAxis();
    x.setLabel("県名");
    NumberAxis y = new NumberAxis();
    y.setLabel("人口");

    BarChart<String, Number> chart = new BarChart<String, Number>(x, y);
    chart.setTitle("棒グラフテスト");
    XYChart.Series<String, Number> xy = new XYChart.Series<>();
    xy.setName("人口");

    xy.getData().add(new XYChart.Data<>("東京都", 13390));
    xy.getData().add(new XYChart.Data<>("神奈川県", 9096));
    xy.getData().add(new XYChart.Data<>("大阪府", 8836));
    xy.getData().add(new XYChart.Data<>("愛知県", 7455));
    xy.getData().add(new XYChart.Data<>("埼玉県", 7239));
    xy.getData().add(new XYChart.Data<>("千葉県", 6197));

    chart.getData().add(xy);

    HBox root = new HBox();
    root.getChildren().add(chart);
    Scene scene = new Scene(root, 600, 400);
    stage.setScene(scene);
    stage.show();
  }

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

 

折れ線エリアグラフ

折れ線はこちら。厳密に言うとエリアグラフと言って折れ線の下の部分が塗りつぶされるヤツです。

 

ソースコードは以下の通り。AresChartクラスを使います。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class AreaChartTest extends Application {

  @Override
  public void start(Stage stage) throws Exception {
    stage.setTitle("Chartテスト");
    NumberAxis x = new NumberAxis(2010, 2015, 1);
    x.setLabel("年度");
    NumberAxis y = new NumberAxis(126000, 129000, 200);
    y.setLabel("人口");

    AreaChart<Number, Number> chart = new AreaChart<Number, Number>(x, y);
    chart.setTitle("AreaChartテスト");
    XYChart.Series<Number, Number> xy = new XYChart.Series<>();
    xy.setName("店舗数");

    xy.getData().add(new XYChart.Data<>(2010, 128057));
    xy.getData().add(new XYChart.Data<>(2011, 127799));
    xy.getData().add(new XYChart.Data<>(2012, 127515));
    xy.getData().add(new XYChart.Data<>(2013, 127298));
    xy.getData().add(new XYChart.Data<>(2014, 127083));
    xy.getData().add(new XYChart.Data<>(2015, 127095));
    chart.getData().add(xy);

    HBox root = new HBox();
    root.getChildren().add(chart);
    Scene scene = new Scene(root, 600, 400);
    stage.setScene(scene);
    stage.show();
  }

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

 

散布図

散布図です。※ちなみにこちらはグラフを作るために作った便宜上のウソデータですのであしからず。公の統計データで散布図にできるものがなくて・・・。

 

ソースコードは以下の通り。ScatterChartクラスを使います。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class ScatterChartTest extends Application {

  @Override
  public void start(Stage stage) throws Exception {
    stage.setTitle("Chartテスト");
    NumberAxis x = new NumberAxis();
    x.setLabel("年齢");
    NumberAxis y = new NumberAxis();
    y.setLabel("年収");

    ScatterChart<Number, Number> chart = new ScatterChart<Number, Number>(x, y);
    chart.setTitle("散布図テスト");
    XYChart.Series<Number, Number> xy = new XYChart.Series<>();
    xy.setName("年収(万円)");

    xy.getData().add(new XYChart.Data<>(21, 300));
    xy.getData().add(new XYChart.Data<>(26, 420));
    xy.getData().add(new XYChart.Data<>(32, 450));
    xy.getData().add(new XYChart.Data<>(55, 820));
    xy.getData().add(new XYChart.Data<>(43, 720));
    xy.getData().add(new XYChart.Data<>(38, 705));
    xy.getData().add(new XYChart.Data<>(34, 655));
    xy.getData().add(new XYChart.Data<>(37, 670));
    xy.getData().add(new XYChart.Data<>(41, 675));
    xy.getData().add(new XYChart.Data<>(47, 810));
    xy.getData().add(new XYChart.Data<>(44, 790));
    xy.getData().add(new XYChart.Data<>(50, 870));
    xy.getData().add(new XYChart.Data<>(30, 610));
    xy.getData().add(new XYChart.Data<>(28, 540));

    chart.getData().add(xy);

    HBox root = new HBox();
    root.getChildren().add(chart);
    Scene scene = new Scene(root, 600, 400);
    stage.setScene(scene);
    stage.show();
  }

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

 

まとめ・雑感

今回は3つのチャートクラスを使って描画しましたが、共通するところはなるべく同じコードで書きました。見ての通り共通部分が多く、チャートクラスを変えるくらいで色々なグラフを描くことができるようです。(横軸が文字列か数値かの違いもありますが)

非常に使いやすいと感じました。グラフ機能を標準装備している言語はあまりないんじゃないかなって思います。C#にもありますが、たしか.NET4.5からで、Windows10ですら新たにインストールする必要があります。(まあ、これはフェアな意見じゃないですね。Javaだってインストールしますから)

いずれにせよ、今までにない機能があって、Javaがどんどん進化していることはよくわかりました。

[ad#ad-1]

スポンサーリンク

 - Java