## 第14章 コマンドモードの利用

Samurai Graphは，コマンドプロンプトから描画グラフを制御するためのコマンドモードを備えています．コマンドモードにより，対話的にグラフを調整したり，スクリプトファイルによって描画命令を一括実行し，自動的にグラフを生成することができます．

## 1. コマンドモードでのSamurai Graphの起動

1. Windowsの場合はコマンドプロンプト，MacOS XやLinuxの場合はTerminal等を起動し，Samurai Graphをインストールしたディレクトリに移動します．

2. 次のコマンドを実行します．

   - Windows

     >     > samurai-graph.exe -i

   - MacOS X

     >     % ./Samurai\ Graph.app/Contents/MacOS/Samurai\ Graph -i

   - Linux

     >     % java -jar samurai-graph.jar -i

3. Samurai Graphがコマンドモードで起動し，プロンプトが入力待機状態になります．

## 2. コマンドとコマンドキー

コマンドモード時には，プロンプトにコマンド命令文を入力し，実行させることができます．例えば

>     $ Data(1)

と入力すれば，IDが1のデータを選択することができます．

コマンド実行時に，コマンドキーを用いて，各種のパラメータを指定して実行することもできます．例えば，先ほどのDataコマンドの実行時に，コマンドキーLineWidthの値を追加指定させて，

>     $ Data(1, LineWidth=5pt)

このように入力して実行すれば，IDが1のデータの線グラフ幅が5ptに設定され，再描画されます．

Samurai GraphのGUIから実行できる全ての操作は，基本的にコマンド・コマンドキーとして準備されています．どのようなコマンドやコマンドキーが準備されているか調べるには，コマンドリファレンスを参照してください．

## 3. コマンドモード利用例

GUIから実行可能な操作は，ほぼ全てがコマンドとしても整備されています．どのようなコマンドが利用でき，どのように記述するかは，コマンドリファレンスを参照してください．

ここでは，例として，グラフ描画から画像出力までの手順を示します．

1. コマンドモードでSamurai Graphを起動してください．

   >     % java -jar samurai-graph.jar -i

2. ウィンドウの選択および新規作成は，Windowコマンドで行います．Windowコマンドは，ウィンドウIDを引数に取ります．

   Samurai Graph起動時には既にIDが1のウィンドウを開いているため，ID=1を指定します．

   >     $ Window(1)

3. フィギュアの選択および新規作成は，Figureコマンドで行います．Figureコマンドは，フィギュアIDを引数に取ります．

   ウィンドウにはまだフィギュアがありませんので，IDが1のフィギュアを新規に作成します．

   >     $ Figure(1)

   フィギュアが生成しました．

4. 作成したフィギュア上に，データを読み込みます．データの選択または新規作成は，Dataコマンドで行います．

   新規にデータを読み込むときには，読み込むデータファイルのパス，データ型，どの列をどの軸に描画するかのカラムタイプを指定する必要があります．

   今回は，Example1.txtを使用し，IDが1のデータを新規に作成します．データ型としてスカラー型 XY グラフ (SXY) を設定し，データファイル中の1カラム目をX軸，2カラム目をY軸とします．

   >     $ Data(1, FilePath="Example1.txt", DataType=SXY,
   >            ColumnType=(1:X, 2:Y))

5. グラフがフィギュア上に描画されましたが，軸スケールなどが調整されていません．また，フィギュアのサイズが少し窮屈です．

   そこで，フィギュアの位置指定，幅および高さの指定を行い，その後，軸スケールの自動調整 (Fit Axes) を行います．フィギュアの設定は，Figureコマンドの第一引数にフィギュアIDを指定し，目的のコマンドキーに値をセットして行います．

   軸スケールの自動調整は，FitAxesコマンドで行います．

   >     $ Figure(1, X=3cm, Y=2cm, Width=14cm, Height=10cm)
   >     $ FitAxes()

6. 次に，描画した線グラフを整形していきます．Dataコマンドの第一引数として，整形したいデータのID（ここでは1）を指定します．コマンドキー値として，線幅を3pt，線タイプを破線，線色を赤に指定しています．また，データの名前をsin(x)に変更します．

   >     $ Data(1, LineWidth=3pt, LineType=BROKEN, LineColor=RED)
   >     $ Data(1, Name="sin(x)")

7. 次に，同一のフィギュアに別のデータを重ね描きしましょう．

   データIDが重複しないように，ID=2のデータとして，`Example2.txt`のシンボルグラフを描画します．

   まず，これまでと同様に，データをDataコマンドで開きます．このデータは誤差付きデータですので，データの3カラム目を2カラム目の下側誤差，4カラム目を2カラム目の上側誤差として開いています．

   >     $ Data(2, FilePath="Example2.txt", DataType=SXY,
   >             ColumnType=(1:X, 2:Y, 3:Lower Error for No.2,
   >             4:Upper Error for No.2))

8. グラフのタイプをシンボルグラフにします．線は非表示にします．また，シンボルをダイヤモンド型，サイズを0.5cm，色を緑に設定します．これらは，これまで同様にDataコマンドのコマンドキー値として設定します．

   また，先ほどと同様に，データの名前を設定しておきます．

   >     $ Data(2, LineVisible=false, SymbolVisible=true, SymbolType=Diamond,
   >             SymbolSize=0.5cm, SymbolBodyColor=GREEN)
   >     $ Data(2, Name="cos(x)")

9. エラーバーを整形します．

   エラーバーの線色を緑に合わせ，線幅を3ptに，先端サイズを0.5cmに設定しています．

   >     $ Data(2, ErrorBarColor=GREEN, ErrorBarLineWidth=3pt,
   >             ErrorBarSymbolSize=0.5cm)

   2番目のグラフの描画は，これで終了とします．

10. 以降は，棒グラフの描画例です．

    データID=3のグラフを更に重ね描きします．これまでと同様に，Dataコマンドを使用して，`Example4.txt`データを指定し，データ型およびカラムタイプを指定し，棒グラフ表示に変更し，棒の内部色を黄色にします．そして，データの名前を設定します．

    >     Data(3, FilePath="Example4.txt", DataType=SXY,
    >             ColumnType=(1:X, 2:Y, 3:Lower Error for No.2,
    >             4:Upper Error for No.2))
    >     $ Data(3, LineVisible=false, SymbolVisible=false, BarVisible=true,
    >             BarBodyFillColor=YELLOW)
    >     $ Data(3, Name="Bar Sample")

11. 軸のラベルがデフォルトのままなので，x軸 (bottom) の名前をxに，y軸 (left) の名前をyに変更します．また，軸ラベルフォントを斜体にします．

    >     $ Axis(bottom, TitleText="x")
    >     $ Axis(left, TitleText="y")
    >     $ Axis(FontStyle=italic)

12. 軸スケールがずれてしまっているので，再度FitAxesコマンドで軸スケールを調整します．

    >     $ FitAxes()

13. 黄色の棒グラフが前面に出ていて，他のグラフが見づらくなっています．SendToBackDataコマンドを利用して，棒グラフデータを最背面に表示するようにしましょう．なお，データの前面・背面への移動コマンドには，引数としてデータIDを指定します．棒グラフのデータIDは3なので，ここでは引数に3を指定しています．

    >     $ SendToBackData(3)

14. レジェンドがグラフに重なっていますので，位置を調整します．レジェンド位置は，フィギュアの座標値で指定する点に注意が必要です．

    >     $ Legend(X=1.1, Y=1.1)

15. レジェンド内のデータ順序が，グラフの前後関係と異なっています．緑→赤→黄色の順にするため，緑のシンボルグラフを一つ上に持っていきましょう．MoveToUpperDataコマンドを利用し，引数にシンボルグラフデータのデータID（2）を指定します．

    >     $ MoveToUpperData(2)

16. 文字ラベルを用いて，グラフタイトルを作成します．

    データなどと同様に，ラベルの選択や新規作成は，LabelコマンドにIDを引数とします．また，文字ラベルの位置も，フィギュアの座標値で指定する点に注意が必要です．

    >     $ Label(1, Text="X-Y Graph Sample", X=0.2, Y=1.5)

17. 文字ラベル位置が少し左過ぎました．文字ラベルの位置を調整します．

    >     $ Label(1, X=0.4)

18. 次に，netCDF形式のデータを疑似カラーマップで描画する例を紹介します．

    再度，Windowコマンドでウィンドウを指定し，Figureコマンドでフィギュアを生成します．ここでは，既存のフィギュアと重複しないよう，フィギュアIDを2とします．また，フィギュア生成時に，一気にフィギュア位置も指定します．フィギュア位置は，既存グラフと重ならないように，ウィンドウの下の方としました．

    >     $ Window(1)
    >     $ Figure(2, X=3cm, Y=14cm)

19. 作成したフィギュアにnetCDFデータを開きます．

    データID=1として，netCDF形式ファイルを読み込みます．データ型はnetCDF形式のスカラー型 XYZ データ (SXYZ_NETCDF) を指定します．netCDF形式データの場合，カラム指定はデータファイル中で定義された変数名を用いて行います．ここでは，x変数を「X」，y変数を「Y」，time変数を「Time」，height変数を「Z」に指定します．また，データ名も「2D-Map」に変えておきます．

    >     $ Data(1, FilePath="Example15.nc", DataType=SXYZ_NETCDF,
    >             ColumnType=(x:X, y:Y, time:Time, height:Z))
    >     $ Data(1, Name="2D-Map")

20. 軸スケールが合っていないため，FitAxesコマンドで軸スケールの自動調整を行い，データ全体を表示するようにします．

    >     $ FitAxes()

21. 軸ラベルを変更します．また，軸とカラーバーのフォントを斜体にします．

    >     $ Axis(bottom, TitleText="X-Coordinate [m]")
    >     $ Axis(left, TitleText="Y-Coordinate [m]")
    >     $ Axis(FontStyle=italic)
    >     $ Colorbar(FontStyle=italic)

22. このマップは，右上ほど標高が高く，左下ほど標高が低いグラフのようです．矢印と文字列を用いて，グラフ中に解説を加えます．

    矢印の追加は，ShapeコマンドのShapeTypeにArrowを指定することで行います．始点と終点の位置は，文字ラベルなどと同様にフィギュアの座標値を用います．また，線幅を5ptに，矢印先端サイズを20ptに，色を赤にします．

    >     $ Shape(1, ShapeType=Arrow, StartX=4.0, StartY=3.0, EndX=12.0, EndY=9.0,
    >              LineWidth=5pt, HeadSize=20pt, Color=Red)

23. 追加した矢印を両矢印にします．また，矢印先端の閉じ角度を90度にし，先端が三角形状となるようにします．

    矢印線の始点タイプにARROW_HEADを指定して両矢印にします．閉じ角度はHeadCloseAngleキーで指定します．

    >     $ Shape(1, StartType=ARROW_HEAD, HeadCloseAngle=90)

24. 矢印脇に，文字列「Higher」「Lower」を追加します．フォントの色を設定し，フォントスタイルも太字に変更します．

    >     $ Label(1, Text="Higher", X=10, Y=10, fontsize=20pt, color=RED,
    >              fontstyle=bold)
    >     $ Label(2, Text="Lower", X=2.5, Y=3, fontsize=20pt, color=BLUE,
    >              fontstyle=bold)

25. 作成したグラフを，画像に出力します．

    前準備として，現在は1番目のフィギュアのレジェンドがウィンドウからはみ出していますので，ウィンドウサイズを調整します．ここでは，ウィンドウ横幅を24cmに変更しています．

    >     $ Window(1, PaperWidth=24cm)

26. 画像出力のコマンドはExportAsImageです．ここまで描いてきたグラフを，背景が白のjpeg形式の画像として出力します．なお，画像出力時に既存のファイルが存在したとき，自動的に上書きされてしまうので注意してください．

    >     $ ExportAsImage(imageType=jpeg, FilePath="Example.jpg", Background=true,
    >                      BackgroundColor=white)

    次の図は，実際に出力された画像です．

27. 作成したグラフを，データセットに保存しましょう．データセット保存コマンドは，SaveDataSetです．データセット形式としてnetCDF形式を指定してください．

    >     $ SaveDataSet(Type=netCDF, FilePath="ExampleSet.nc")

28. なお，データセットの読み込みコマンドは，LoadDataSetです．引数にファイルパスを指定します．

    次の例では，新たにID=2のウィンドウを開き，データセットを読み込んでいます．

    >     $ Window(2)
    >     $ LoadDataSet("ExampleSet.nc")

以上でコマンドの使用例は終わりです．

どのようなコマンドが利用できるかを調べる場合は，コマンドリファレンスを参照してください．

## 4. スクリプトファイルの利用

コマンドを連続して記述したスクリプトファイルをSamurai Graphに読み込ませて，一括して一連のコマンド処理を実行することができます．

例として次のようなスクリプトファイルを準備し，Samurai Graphに読み込ませてみましょう．なお，このスクリプトファイルの一連のコマンドは，項3. 「コマンドモード利用例」で説明した内容の一部です．コマンドスクリプトファイルを読み込む際，#で始まる行は，コメント行として無視されます．

>     # Window指定
>     Window(1)

>     # Figure作成
>     Figure(1)

>     # Data読み込み
>     Data(1, FilePath="Example1.txt", DataType=SXY, ColumnType=(1:X, 2:Y))

>     # Figure整形
>     Figure(1, X=3cm, Y=2cm, Width=14cm, Height=10cm)

>     # FitAxes
>     FitAxes()

>     # Data整形
>     Data(1, LineWidth=3pt, LineType=BROKEN, LineColor=RED)
>     Data(1, Name="sin(x)")

Samurai Graphでこのスクリプトファイルを実行するには，次の4通りの方法があります．ここでは作成したスクリプトファイルを`sample.sgs`として説明します．拡張子sgsのファイルは，Samurai Graphスクリプトファイルと見なされます．

- `sample.sgs`をダブルクリックする．Samurai Graphが関連づけ起動され，起動時にスクリプトファイルの内容が実行されます．（この機能は，Windowsでのみサポートしています．）

- コマンドモードで立ち上げてあるSamurai Graphのウィンドウに，`sample.sgs`をドラッグ・アンド・ドロップする．スクリプトファイルの内容が実行されます．

- Samurai Graph起動時に，-sオプションを付けて，その後ろにスクリプトファイルのパスを指定する．なお，このときにスクリプトファイルの拡張子はsgsである必要はありません．

  - Windows

    >     > samurai-graph.exe -s "sample.sgs"

  - MacOS X

    >     % ./Samurai\ Graph.app/Contents/MacOS/Samurai\ Graph -s "sample.sgs"

  - Linux

    >     ％ java -jar samurai-graph.jar -s "sample.sgs"

- コマンドモードでSamurai Graphを立ち上げた後，<<に引き続いてスクリプトファイルパスを指定する．なお，このときにスクリプトファイルの拡張子はsgsである必要はありません．

  >     $ <<sample.sgs

このスクリプトファイルを利用したとき，次のようなグラフを描画できます．

Last updated: 2010/11/22