[ 前へ | 目次 | 次へ ]

Java言語による制御・自動処理

リニアングラフ2Dは、VCSSLに加えて、Java言語での制御もサポートしています。

開発の準備とコンパイル・実行

Java言語でリニアングラフ2Dを制御するには、別途Java言語の開発環境(JDK)が必要です。JDKの入手やインストールについては、Java言語の解説書や解説サイトなどをご参照ください。 なお、ここでは解説の単純化のためIDEは使用せず、コンパイルと実行はコマンドラインで行います。

はじめに、環境が揃っている事の確認として、リニアングラフ2Dを起動するための簡単なサンプルを作成し、コンパイル・実行してみましょう。 「Sample0.java」という名前で、以下のコードを記述したテキストファイルを作成してください:

続いて、リニアングラフ2Dの配布パッケージ内にある「 RinearnGraph2D.jar (JARファイル) 」を、上のコードと同じ場所に置いてください。 そして、コマンドライン端末上でその場所にcdなどで移動し、以下のように入力してコンパイルしてください:

javac -classpath ".;RinearnGraph2D.jar" Sample0.java     (Windowsの場合)
javac -classpath ".:RinearnGraph2D.jar" Sample0.java     (Linux等の場合)
※ 上の二つは、 -classpath の後の部分での区切り文字が、 「 ; 」 と 「 : 」で異なっています。

エラー無くコンパイルできた事を確認した上で、そのまま以下のように入力して実行してください:

java -classpath ".;RinearnGraph2D.jar" Sample0     (Windowsの場合)
java -classpath ".:RinearnGraph2D.jar" Sample0     (Linux等の場合)

実行の結果、グラフ画面が起動すれば成功です。以降のサンプルコードでは、上のコマンドのSample0の部分をSample1〜Sample6に置き換えて、同様にコンパイル・実行できます。 その際、ファイル名は必ず「 クラス名.java 」とするようにご注意ください。

このページで使用するリニアングラフ2DのJava言語用APIライブラリは、以下のURLで仕様書を参照できます。 このページでは触れきれない細かい機能の一覧や詳細などは、そちらをご参照ください:

リニアングラフ2D API仕様書 ( Java言語用 )
https://www.rinearn.com/ja-jp/graph2d/api/

APIライブラリの中でも特に使用するRinearnGraph2Dクラスの仕様書は、以下で参照できます:

RinearnGraph2Dクラス API仕様書
https://www.rinearn.com/ja-jp/graph2d/api/com/rinearn/graph2d/RinearnGraph2D

以下では、いくつかの基本となる使い方について、サンプルコードを例示しながら解説していきます。 なお、以下で掲載するサンプルコードは、配布パッケージ内にも同梱されています。

ファイルのプロット

まずは、実用における最も単純な例として、CSVファイルに記載されたデータをプロットしてみましょう。以下のサンプルデータファイルを使用します:

- SampleDataFile1.csv -
0.0,0.0
1.0,1.0
2.0,4.0
3.0,9.0
4.0,16.0
5.0,25.0
6.0,36.0
7.0,49.0
8.0,64.0
9.0,81.0
10.0,100.0

この通り、2カラム書式(左から x y )で、0 <= x <= 10の範囲で関数y = x2の座標値が書き出されています。このファイルを開いてグラフにプロットするプログラムは以下の通りです:

実行結果

上のコードでは、まずRinearnGraph2Dクラスのインスタンスを生成し(この時点でグラフ画面が起動します)、 そしてopenDataFile メソッドを呼び出して、開きたいファイルを引数に渡しています。 ファイルを開く過程での例外については、必要に応じて適切に処理してください。

配列データのプロット

ファイルを介さず、配列に格納された座標値データを、直接渡してプロットする事もできます:

実行結果

※ Y軸の中心が0になっていないのは、上下の端が僅かに±1からずれているため、後で扱うようにプロット範囲を設定すると、綺麗に揃えられます。

このように、先ほどファイルを開いていた openDataFile メソッドの代わりに、setDataメソッドで配列データを渡します。

配列データは、ここでは単系列なので x[ 座標点インデックス ] の形ですが、 系列を分けたい場合は x[ 小系列インデックス ][ 座標点インデックス ] の形の2次元配列にします(yも同様)。 プロット結果では系列の区切りで色が変わり、また、線プロット時では系列の区切りで線が切れます。

なお、上のコードで、座標値データの点数 n を 101 と半端な値にしているのは、単純に端の点でのX値をきりのいい値にするためで、重要な意味はありません (※ Xの値を単純に配列イデックス×0.1としているので、インデックスの範囲が0〜100ならちょうどきりがいいのですが、そのために必要な配列要素数は101個です)。

画像の出力

グラフを画像ファイルに出力するには、RinearnGraph2DクラスのexportImageFile メソッドを使用します。 例えば、これまでのサンプルコードにおいて、mainメソッドの末尾に以下の一行を追加すれば、画像ファイル「graph.png」が出力されます:

画像形式は拡張子から自動で判断されますが、現時点ではJPEGとPNG形式にのみ対応しています。2番目の引数は画質で、1.0で最高、0.0で最低となります(JPEG形式のみで有効です)。

なお、getImageメソッドにより、グラフ画像をjava.awt.Imageクラスのインスタンスとして取得する事もできます。 これにより、グラフ画像を加工したり、別のGUI画面上に埋め込んだりする事も(それなりの処理を書く必要がありますが)可能です。

範囲やオプションなどの詳細設定

setXRange / setYRange メソッドや setOptionSelected メソッドなどを用いて、プロット範囲やオプションなどの設定を行う事ができます。 例として、先ほどと同様の配列データをプロットし、点プロットオプションを無効化しつつ線プロットオプションは有効である状態にして、範囲も設定してみましょう:

実行結果

上のコードでは、グラフに座標値データを渡してプロットさせた後、まず setXRange / setYRangeメソッドでそれぞれX/Y軸方向のプロット範囲を設定しています。

続いて、setScreenSize メソッドでグラフスクリーンの幅と高さを設定しています。グラフスクリーンは、グラフが描画されているスクリーンの事で、 グラフを画像ファイルに出力する際などには、ここで指定したサイズが出力画像のサイズになります。

その後は、setOptionSelectedメソッドでプロットオプションの有効/無効状態を操作しています。 操作するオプションの項目は RinearnGraph2DOptionItem 列挙子の要素で指定します。 上では点プロットオプションを無効化し、線プロットオプションを(こちらはデフォルトでも有効ですが)有効化しています。

また、プロットオプションでの線の太さなどの詳細設定を、setOptionParameterメソッドで行っています。 このメソッドには、まずRinearnGraph2DOptionParameter クラスのインスタンスを生成して設定内容を保持させた上で、それを引数に渡します。 線の太さの他に、点プロットでの点の大きさなども設定できます。

設定系のメソッドは他にも存在します。詳細については、RinearnGraph2DクラスのAPI仕様書をご参照ください。 なお、細かい設定を一括で行うには、リニアングラフ2Dの設定ファイルを loadConfigurationFile メソッドで読み込む方法もあります。 設定周りの処理があまり多くなってくると、コードをシンプルにする上でも、設定ファイル経由の方が便利です。 また、APIでは細かすぎて未サポートになっているような設定も、設定ファイル経由なら行えます。 一方で、設定ファイルの記載内容やその有効性は、(できるだけ互換は保たれますが)リニアングラフ2Dのバージョンに依存する事に留意する必要があります。

アニメーションプロット

アニメーションプロットを行うには、スレッドを生成して、その中で8-2や8-3で扱ったファイルや配列データのプロットを繰り返し、少しずつ異なる内容を連続で描かせ続ければOKです。

ただし標準では、setDataメソッドで配列データを渡した際、データの描画処理が完了するまで、呼び出し元に処理が戻らない事に留意する必要があります。 これは、アニメーションの各画面をコマ落ちなく画像に出力したい場合などには便利です。 しかし、例えば外部の装置などから入力されるデータをリアルタイムでプロットしたい場合などには、次々と入ってくるデータに対して描画速度が追い付かない、つまり描画がボトルネックになってしまう可能性もあります。

そのような場合には、setAsynchronousPlottingEnabledメソッドの引数にtrueを指定すると、setDataメソッド呼び出し時はすぐに処理が戻り、描画処理は別スレッドで非同期に、適当なタイミングで行われるようになります。 これは、一般にアニメーション速度を描画所要時間に依存させたくない場合にも有効です。

実際に、毎時刻の配列データを計算で生成し、非同期描画でアニメーションさせてみましょう:

実行結果 (干渉するsin波のグラフがプロットされ、形状がアニメーションで時間変化します。)


スポンサーリンク


スポンサーリンク

この階層の目次
お知らせ

Vnanoのソースコードと開発リポジトリをGitHubで公開
2018年09月30日 - 現在開発中の、ソフトウェア上でのスクリプト処理用途に向けた小型・軽量スクリプトエンジン「 Vnano 」のソースコード&リポジトリを公開しました。ビルド・使用方法や、現状の段階と今後などを解説します。

リニアングラフ3D&2D Ver.5.6 リリース! Java言語のプログラムからも制御可能に
2018年08月19日 - 約5年ぶりの大きなバージョンアップを迎えた、新しいリニアングラフ Ver.5.6の特徴をご紹介します。UIがリファインされ、Java言語でグラフ描画ライブラリとして使う事も可能になりました。

ライセンスの緩和方向への改訂を実施、条件を満たす場合のソフトの再配布などが可能に
2018年07月16日 - RINEARNでは2018年7月に、ソフトウェアライセンスの緩和方向への改訂を実施しました。新ライセンスでは、いくつかの条件を満たす場合において、ソフトの再配布などが無申請で可能になりました。

コードアーカイブ新着
配列を3Dグラフにアニメーションプロットする(点/線グラフ)

座標値配列の内容を、3次元の点/線グラフに連続でプロットし、アニメーションさせるサンプルプログラムです。
2018年11月14日
配列を2Dグラフにアニメーションプロットする

座標値配列の内容を、2次元グラフに連続でプロットし、アニメーションさせるサンプルプログラムです。
2018年11月13日
配列を3Dグラフにプロットする(曲面/メッシュグラフ)

座標値配列の内容を、3次元の曲面/メッシュグラフにプロットするサンプルプログラムです。
2018年11月12日
ファイルを3Dグラフにプロットする(曲面/メッシュグラフ)

座標値ファイルの内容を、3次元の曲面/メッシュグラフにプロットするサンプルプログラムです。
2018年11月11日
連番画像をアニメーション再生する簡易ツール

フォルダ内の連番画像ファイルを、動画への変換不要で、そのままアニメーションとして再生できる簡易ツールです。
2018年09月04日
公式Twitterアカウント

スポンサーリンク