# plot

2Dプロット

## 呼び出しの手順

    plot(y,<LineSpec>,<GlobalProperty>)
                plot(x,y,<LineSpec>,<GlobalProperty>)
                plot(x1,y1,<LineSpec1>,x2,y2,<LineSpec2>,...xN,yN,<LineSpecN>,<GlobalProperty1>,<GlobalProperty2>,..<GlobalPropertyM>)
                plot(<axes_handle>,...)

## 引数

x

  実数行列またはベクトル. 省略した場合, `1:n`であると 仮定されます. ただし, `n`は`y`パラメータで 指定された曲線の点の数です.

y

  実数行列またはベクトル. `y` はマクロまたはプリミティブ として定義された関数とすることもできます.

<LineSpec>

  このオプション引数は文字列で 線を描画する手法を指定するショートカットとして使用されます. `LineSpec`は指定済みの各`y` または `{x,y}` 毎に一つ指定できます. `LineSpec`はLineStyle,MarkerおよびColorと同時に処理されます (LineSpec参照). これらの指定子はプロットされた線において線の種類,マーカの種類および色を定義します.

<GlobalProperty>

  このオプションの引数は, グローバルオブジェクトのプロパティを定義する 一連の命令`{PropertyName,PropertyValue}` を表し, このプロットで作成された全ての曲線に適用されます. 利用可能なプロパティの全て参照するには GlobalPropertyを参照してください.

<axes_handle>

  このオプションの引数は,カレントの軸ではなく `axes_handle`で 指定した軸の内部にプロットが表示されることを指定します (gca参照).

## 説明

`plot` は一連の二次元曲線をプロットします. `plot` はMatlab構文との互換性を改善するために 修正されています. グラフィックの互換性を改善するために, Matlabユーザは (plot2dではなく) `plot`を使用してください.

データエントリ仕様 :

本節では,記述を明確化するため,オプションの引数 `LineSpec`および `GlobalProperty` については言及しません. これはこれらの引数は, (`"Xdata"`, `"Ydata"` および `"Zdata"` プロパティを 除く, GlobalProperty参照) エントリデータと干渉しないためです. これら全てのオプション引数を同時に指定することが可能です.

`y` がベクトルの場合, plot(y) はベクトル `y` をベクトル `1:size(y,'*')`に対してプロットします.

`y`が行列の場合, plot(y) は`y`の各列を `1:size(y,1)`に対してプロットします.

`x` および `y` がベクトルの場合, plot(x,y) は ベクトル `y` をベクトル `x`に対してプロットします. ベクトル`x` および `y` の要素数は同じである必要があります.

`x` がベクトルで `y` が行列の場合, plot(x,y) は `y` の各列をベクトル `x`に対してプロットします. この場合,`y` の列の数は `x` のエントリの数と同じである必要があります.

`x` と `y` が行列の場合, plot(x,y) は `y` の各列を`x`の同じ列に対してプロットします. この場合,`x` と`y` の大きさは同じである必要があります.

最後に, `x` または `y` が行列の場合, ベクトルは行列の各行または各列に対してプロットされます. この選択は,行列の行また列の次元にベクトルの行または列の次元のどちらが 一致するかに応じて行われます. (`x` または `y` のみが)正方行列の場合, 列が行よりも優先されます(以下の例参照).

`y` はマクロまたはプリミティブとして定義された関数と することも可能です.この場合, `x` データを(ベクトルまたは行列として)指定する必要があり, 対応する`y(x)`の計算が暗黙の内に行われます.

`LineSpec` と`GlobalProperty` 引数は プロットをカスタマイズするために使用されます. 以下に利用可能な全オプションのリストを示します.

LineSpec

  このオプションは曲線の描画方法を簡便な方法で 指定する際に使用されます. このオプションは,LineStyle, Marker および Color指定子を含む文字列とする 必要があります.

  これらのリファレンスは曖昧さがないように 文字列内で指定することが必要です(順番は重要ではありません). 例えば,ダイヤモンド型の記号を付けた赤い長い破線を指定する場合, 以下のように書くことができます: `'r--d'` , `'--dire'` または `'--reddiam'` または他のあいまいでない命令, もしくは全体を指定する `'diamondred--'` (LineSpec参照)

  線の種類,色,マーカの色(および大きさ)も ポリラインエンティティプロパティにより(再)設定できることに 注意してください (polyline_properties参照).

GlobalProperty

  このオプションは, `LineSpec`を使用する よりも多くのオプションを用いて曲線のプロット方法を指定できます. `PropertyName`を定義する文字列と その値である`PropertyValue` (`PropertyName`の型に依存して文字列または整数または...) の組で指定する必要があります. `GlobalProperty`により複数のプロパティ, つまり, LineSpec により利用可能なあらゆるプロパティ, マーカの色(表示色および背景色), 視認性, クリッピング, 曲線の太さ, を設定可能です. (GlobalProperty参照)

  これらのプロパティは全て ポリラインエンティティプロパティ (polyline_properties参照) により(再)設定できることに注意してください.

## 注意

デフォルトでは, 連続したプロットは重ね描きされます. 前のプロットを消去するには, `clf()`を使用してください. `auto_clear` モードを デフォルトで有効にするには,次のようにデフォルトの軸を編集してください:

da=gda();

da.auto_clear = 'on'

表示を改善するために`plot`関数が親の軸の `box`プロパティを修正することがあります. これは,親の軸が`plot`のコールにより作成されたか, コール前に空である場合に行われます. 軸の一つが原点を中心にしている場合, ボックスは無効となります. その他の場合, ボックスが有効になります.

ボックスプロパティと軸の配置に関する詳細については, axes_propertiesを参照ください.

色を指定しない場合,曲線をプロットする際にデフォルトの色テーブルが 使用されます. 複数の線を描画する際,plotコマンドは自動的に このテーブルに基づき周期的に選択します. 以下に使用される色を示します:

`R` | `G` | `B`
0. | 0. | 1.
0. | 0.5 | 0.
1. | 0. | 0.
0. | 0.75 | 0.75
0.75 | 0. | 0.75
0.75 | 0.75 | 0.
0.25 | 0.25 | 0.25

コマンド `plot` を入力することによりデモを見ることができます.

## 例

plot();

## 例

    // x 初期化
    x=[0:0.1:2*%pi]';
    //simple plot
    plot(sin(x))
    clf()
    plot(x,sin(x))
    //複数プロット
    clf()
    plot(x,[sin(x) sin(2*x) sin(3*x)])
    clf()

    // 右に軸
    plot(x,sin(x))
    a=gca(); // カレントの軸エンティティのハンドル
    a.y_location ="right";
    clf()

    // (0,0)を中心とする軸
    plot(x-4,sin(x),x+2,cos(x))
    a=gca(); // 軸エンティティのハンドル
    a.x_location = "origin";
    a.y_location = "origin";

    // plotにより作成されたエンティティに複数の処理を行う
    a=gca();
    a.isoview='on';
    a.children // 軸の子のリスト : ここでは,2個のエンティティの複合子オブジェクト
    poly1= a.children.children(2); //線分群のハンドルをpoly1 に保存
    poly1.foreground = 4; // スタイルを変更する別の方法...
    poly1.thickness = 3;  // ...曲線の太さ.
    poly1.clip_state='off' // 制御をクリップ
    a.isoview='off';

    //LineSpec と GlobalProperty の例:
    clf();
    t=0:%pi/20:2*%pi;
    plot(t,sin(t),'ro-.',t,cos(t),'cya+',t,abs(sin(t)),'--mo')
    scf(2)
    plot([t ;t],[sin(t) ;cos(t)],'xdat',[1:2])
    scf(3)
    axfig3 = gca();
    scf(4) // 空白のままにする
    plot(axfig3,[t ;t],[sin(t) ;cos(t)],'zdat',[1:2],'marker','d','markerfac','green','markeredg','yel')
    xdel(winsid())

    //データ指定
    t=-%pi:0.1:%pi;
    size(t)
    plot(t) // ベクトルtの大きさに対してyをプロット
    clf(); // 図を消去

    plot(t,sin(t)); // tに対してsin(t)をプロット
    clf();

    t=[1     1     1     1
       2     3     4     5
       3     4     5     6
       4     5     6     7];

    plot(t) // 行の大きさに対してtの各列をプロット
    clf();

    subplot(221)
    plot(t,sin(t)); // 列毎にtに対してsin(t)をプロット
    xtitle("sin(t) versus t")
    subplot(222)
    plot(t,sin(t)')
    xtitle("sin(t)'' versus t")
    subplot(223)
    plot(t',sin(t))
    a=gca();
    a.data_bounds=[0 -1;7 1]; // y軸に隠された垂直線を表示
    xtitle("sin(t) versus t''")
    subplot(224)
    plot(t',sin(t)')
    xtitle("sin(t)'' versus t''")

    clf();

    //特別な場合1
    //x : vector ([5 6 7 8]) and y : matrix (t)
    x=[5 6 7 8]
    plot(x,t);
    plot(x',t); // idem, x はtに一致するように自動的に転置される (ここでは列)
    clf()

    // Only one matching possibility case : how to make 4 identical plots in 4 manners...
    // x is 1x4 (vector) and y is 4x5 (non square matrix)
    subplot(221);
    plot(x,[t [8;9;10;12]]');
    subplot(222);
    plot(x',[t [8;9;10;12]]');
    subplot(223);
    plot(x,[t [8;9;10;12]]');
    subplot(224);
    plot(x',[t [8;9;10;12]]');
    clf()

    //特別な場合2
    // xまたはyのみが疎行列の場合
    //x : matrix (t) と y  : vector ([1 2 3 4])
    plot(t,[1 2 3 4]) // plot(t,[1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4])と同じ
    plot(t,[1;2;3;4]) // 同じプロット
    clf();

    // tは転置される : 列の処理で指定された優先順位に注意
    plot(t',[1 2 3 4]) // plot(t',[1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4]) と同じ
    plot(t',[1 2 3 4]') // 同じプロット
    clf();

    // y はプリミティブで定義された関数
    plot(1:0.1:10,sin) // plot(1:0.1:10,sin(1:0.1:10))と同じ
    clf();

    // ..マクロ:
    deff('[y]=toto(x)','y=x.*x')
    plot(1:10,toto)

## 参照

- plot2d
- surf
- scf
- clf
- xdel
- delete
- LineSpec
- GlobalProperty