Scilab 勉強会 1. 2D プロット

Scilab 勉強会
11 月 29 日
担当:根澤・山平
1. 2D プロット
1.1
基本的な2D プロット法
最も簡単な2D プロットは、plot(x, y) または plot(y) です。これは、x の関数yのプ
ロットです。ただし、xとyは、ともにベクトルです。xが与えられない場合、ベク
トル(1,……,size(y))で代用されます。y が行列の場合、各行がプロットされます。オ
プションの引数があります。
例
-->
// first example of plotting
-->
t = (0:0.05:1);
-->
ct = cos(2*%pi*t);
-->
plot2d(t, ct);
一般的な複数の 2 次元プロットは、以下のようなものです。
plot2di(str, x, y, [style, strf, leg, nax])
−パラメータ
i = missing, 1, 2, 3, 4
異なった i の値に対して次の様に分かれます。
i = missing
区分線形プロット
i=1
上と同じだが、対数軸でプロット
i=2
区分定数描画スタイル
i=3
垂直バー
i=4
矢印スタイル(例えば、位相空間における常微分方程式)
−パラメータ
str:文字列 ”abc”
i が無い場合 str は空です。
a=e
空(empty)を意味します。x の値は使用されません。
a=g
一般(general)を意味します。
b=1
対数軸スケールを X 軸に用います。
c=1
対数軸スケールを Y 軸に用います。
-1-
−パラメータ
x、y
同じ大きさ[nl,nc]の 2 つの行列(nc は曲線の数、nl は各曲線の点の数)
−パラメータ
style
大きさ(1, nc)の実数ベクトル。
曲線 j に対して使用するスタイルは、size(j)により定義される。
−パラメータ
strf
以下の文字列に一致する長さ 3 ”xyz”の文字列。
x=1
キャプションを表示
y=1
プロットの境界を指定するために引数 rect を使用する。
rect=[xmin, ymin,xmax,ymax]
y=2
プロットの境界を計算する
y=0
現在の境界
z=1
軸を描く際に目盛の数を引数 nax により指定することが可能です。
z=2
プロットは、箱により囲われる。
−パラメータ
reg
キャプションの文字列であり、プロット曲線ごとに指定します。
この文字列は記号【@】により区切られたフィールドから構成されます。
例えば ”module@phase”
この文字列は対応する曲線のスタイルを連想させる
小さな線と共にプロットに表示されます。
−パラメータ
rect
プロットの境界をしていする 4 つの値からなるベクトル。
rect = [xmin, ymin, xmax, ymax]
プロット関数ごとに、引数なしでコマンドのみを実行するとデモが表示されます。
例 plot2d3()
-->
x=[0:0.01:2*%pi]';
-->
plot2d(x,[sin(x),sin(2*x)sin(3*x)],rect=[0,-1.5,6,1.5], ..
leg="sin(x)@sin(2x)@sin(3x)")
-2-
1.2 特別な 2 次元プロット
l
champ(x,y,fx,fy,[arfact,rect,strf])
Ø
R 2 のベクトルフィールド
²
l
2
ある関数により定義された R のベクトルフィールド
²
関数
ある関数により定義された曲線の 2 次元プロット
²
xr
ベクトル
²
f
関数(f(x))
fgrayplot(x,y,f,[strf,rect,nax])
Ø
l
f
fplot2d(xr,f,[style,strf,leg,rect,nax])
Ø
l
グリッドの範囲を定義
fchamp (f,t,xr,yr,[arfact,rect,strf])
Ø
l
x、y
2 次元プロット上のグレイレベル
²
x、y
ベクトル
²
f
関数(f(x、y))
errbar(x,y,em,ep)
Ø
誤差バーつきのプロットを作成します
²
x、y
plot2d で指定した x、y と同じもの
²
em,ep
x,y と要素数が同じである必要がある
1.3 キャプションとプレゼンテーション
l
xgrid([style])
Ø
2 次元グラフィックにグリッドを付加します。
²
l
integer。グリッドの色が変わる。
xtitle(xtit,[xax,yax,encad])
Ø
l
style
2 次元グラフィックにタイトルと軸の名称を付加します。
²
xtit
グラフタイトル
²
xax,yax
軸の名称。xax は X 軸、yax は Y 軸。
titlepage(str)
Ø
グラフィックのタイトルページ
²
str
文字列。
-3-
l
plotframe(rect,tics,[arg_opt1,arg_opt2,arg_opt3])
Ø
スケール、グリッドつきグラフィックのフレーム
²
rect
グラフの範囲
²
tics
??グラフの軸上の数字の間隔??
²
caption
[title,x-leg,y-leg]
²
subwin
[x,y,w,h] ウィンドウの左上の位置と幅、高さ
l
グラフタイトル、x、y 軸の名称
幅と高さの合計が 1.0 を超えると超えた部分に関しては表示されな
いか、またはエラーになる。
1.4 幾何学的図のプロット
多角形のプロット
l
xsegs(xv、yv,[style])
Ø
接続していない線分の組を描きます
²
l
長方形を一つ書きます
²
x、y
左上の点
²
w,h
幅、高さ
xfrect(x,y,w,h)
Ø
長方形を一つ塗りつぶします
²
l
長方形の組を塗りつぶすか、描きます
²
rects=[x1 y1 w1 h1;x2 y2 w2 h2;...]'
²
サイズが(4, n)の行列
xpoly(xv,yv [,dtype [,close]])
Ø
l
多角形を描きます
²
xv,yv
多角形の各点。x 座標と y 座標の行列
²
dtype
lines:実線 marks:点 の 2 種類
xpolys(xpols,ypols,[draw])
Ø
多角形の組を描きます
²
l
同上
xrects(rects,[fill])
Ø
l
同じサイズの行列
xrect(x,y,w,h)
Ø
l
xv,yv
xpols,ypols
同じサイズの行列
xfpoly(xv,yv,[close])
Ø
多角形を塗りつぶします
²
xv,yv
多角形の各点。x 座標と y 座標の行列
-4-
l
xfpolys(xpols,ypols,[fill])
Ø
多角形の組を塗りつぶします
²
l
同じサイズの行列
xarrows(nx,ny,[arsize,style])
Ø
l
xpols,ypols
接続していない矢印の組を描きます
²
nx,ny 同じサイズのベクトルか行列
²
arsize 矢印の頭のサイズ
xclea (x,y,w,h)
Ø
グラフィックウィンドウ上の長方形を消去します
²
help の例を実行しましたが意味が分かりませんでした
曲線のプロット
l
xarc(x,y,w,h,a1,a2)
Ø
l
楕円を描きます
²
x,y,w,h 左上の点、幅、高さ
²
a1,a2
円を描画開始角度、描画終了角度(↑が 0 度)
²
a1,a2
共に 1/64 で計算される
xfarc(x,y,w,h,a1,a2)
Ø
楕円を塗りつぶします
²
l
同上
xfarcs(arcs,[style])
Ø
一組の楕円を塗りつぶす、または描きます
²
arcs
²
arcs=[x y w h a1 a2;x y w h a1 a2;...]'
例
サイズが(6, n)の行列
arcs=[ -1.0 0.0 0.5; // upper left x
1.0 0.0 0.5; // upper left y
0.5 1.0 0.5; // width
0.5 0.5 1.0; // height
0.0 0.0 0.0; // angle 1
180*64 360*64 90*64]; // angle 2
-5-
1.5 プロットに書き込む
l
xstring(x,y,str,[angle,box])
Ø
l
x,y
文字列の左下の座標
²
str
表示させる文字列
²
angle
角度、デフォルトでは 0
²
box
囲みの有無、デフォルトでは 0
文字列を囲む長方形を計算します
²
rect=xstringl(x,y,str,[fontId,fontSize])
²
入力した文字列を囲む長方形のサイズを返す
²
rect = [x,y,w,h]
xstringb(x,y,str,w,h,[option])
Ø
l
²
xstringl()
Ø
l
文字列または文字列の行列を描きます
指定した箱に文字列を描きます
²
x,y,w,h 左下の座標と幅、高さ
²
str
文字列の行列
xnumb(x,y,nums,[box,angle])
Ø
数字の組を描きます
²
x、y
num を描く座標
²
nums 数字の行列
1.6 プロットの加工とグラフィックスコンテキスト
l
isoview(xmin,xmax,ymin,ymax)
Ø
l
square(xmin,xmax,ymin,ymax)
Ø
l
ウィンドウのサイズ変更を伴う等長スケーリング
xy1=scaling(xy,factor,[orig])
Ø
l
各変数を含み x、y 座標のスケールを等しくする
データのスケーリング
xy1=rotate(xy,[theta,orig])
Ø
回転:xy を theta 分回転
[wrect,frect,logflag,arect]=xgetech()
xsetech(wrect,[frect,logflag])
Ø グラフィックウィンドウの内部でスケールを変更します
²
カレントのグラフィックスケールは、高レベルプロットコマンドにより
変更可能です。この値を得たり、直接修正したいと思うかもしれませ- 6
-- 6 -ん。
:これが、xgetech,xsetech の役割です。
-6-
2. 3D プロット
2.1
基本的な 3D プロット
l
plot3d - 曲面の 3 次元プロット
点座標の 3 次元プロット。3 つの行列 x,y,z,を plot3d(x,y,z)に用います。この場合、
x,y 座標系で点の値が z になります。他の引数はオプションです。
使い方:plot3d(x,y,z,[theta,alpha,leg,flag,ebox])
plot3d(x,y,z,<opt_args>)
パラメータ:
Ø
<opt_args> : key1=value1, key2=value2 , ... となる順番で命令を示し key1 ,
key2, ... は次の内の一つを示します:theta, alpha ,leg,flag,ebox。
Ø
theta, alpha : 観測点の球座標の角度を与える実数値。
Ø
leg : "X@Y@Z"のように,一つの分離した空間として @で各軸のラベルを定義す
る文字列。
Ø
flag : サイズ3 の実数ベクトル。 flag=[mode,type,box]。
²
mode : 整数(曲面のカラー)。
l
mode>0 : "mode" の色で曲面は描かれます; 面の境界はカレントライン
スタイルとカラーで描かれます。
²
l
mode=0: 曲面を網目状に描きます。
l
mode<0: 曲面は"-mode" の色描かれます; 面の境界は描かれません。
type : 整数(スカラー)。
l
type=0: プロットは3 次元スケールが用いられます (前のparam3d ,
plot3d , contour , plot3d1 の呼び出しでセットされます)。
l
type=1: 自動的に最後の縦横比で3 次元ボックスを再スケールし,
ebox の任意の引数で境界が指定されます。
l
type=2: 自動的に最後の縦横比で3 次元ボックスを再スケールし,与え
られたデータを使って境界が計算されます。
l
type=3: 任意のebox で与えられるボックス範囲での 3 次元等距離図
法(type=1 と似ています)。
l
type=4: データから引き出される範囲での3 次元等距離図法 ( type=2
と似ています)。
l
type=5: 任意のebox で与えられるボックス範囲での 3 次元拡張等距
離図法で,type=1 と似ています。
l
type=6: データから引き出される範囲での3 次元拡張等距離図法で,
type=2 と似ています。
²
box : 整数(プロットの周りのフレーム)。
-7-
l
box=0: プロットの周りには何も描きません。
l
box=1: 未実行(box=0 と同意)。
l
box=2: 曲面のあとに軸のみを描きます。
l
box=3: 曲面の周囲のボックスが描かれ,見出しが加えられます。
l
box=4: 曲面の周囲のボックスが描かれ,タイトルと軸が加えられます。
Ø ebox : ベクトル[xmin,xmax,ymin,ymax,zmin,zmax] でプロットの境界を指定し
ます。この引数はflag の中のtype と一緒に使われます: 1 , 3 , 5 がセットさ
れている場合 (対応する動作は上記参照)。 flag を設定しない場合は,ebox は
考慮されません。
-->t=[0:0.3:2*%pi]';
-->z=sin(t)*cos(t');
-->plot3d(t,t,z)
-->clf()
-->plot3d(t,t,z,alpha=35,theta=45,flag=[-2,2,3])
l
plot3d1 - 曲面の 3 次元グレーまたはカラーレベルプロット
使い方:plot3d1(x,y,z,[theta,alpha,leg,flag,ebox])
plot3d1(xf,yf,zf,[theta,alpha,leg,flag,ebox])
plot3d1(x,y,z,<opts_args>)
plot3d1(xf,yf,zf,<opts_args>)
パラメータ:
各パラメータは plot3d と同じ。
l
fplot3d - 関数により定義されたサーフェイスの 3 次元プロット
使い方:fplot3d1(xr,yr,f,[theta,alpha,leg,flag,ebox])
fplot3d1(xr,yr,f,<opt_args>)
パラメータ:
l
Ø
xr : n1 サイズの行ベクトル。
Ø
yr : n2 サイズの行ベクトル。
Ø
f : z=f(x,y)タイプの外部関数。
Ø
theta,alpha,leg,flag,ebox : plot3d 参照。
Ø
<opt_args> : plot3d 参照。
fplot3d1 - 関数により定義されるサーフェイスの白黒またはカラーレベルのプロ
ット
使い方:fplot3d1(xr,yr,f,[theta,alpha,leg,flag,ebox])
fplot3d1(xr,yr,f,<opt_args>)
-8-
パラメータ:
各パラメータは fplot3d と同じ。
-->deff('z=f(x,y)','z=x^4-y^4')
-->x=-3:0.2:3 ;y=x ;
-->fplot3d(x,y,f)
2.2
特別な 3D プロット
l
param3d - パラメータ曲線の 3 次元プロット
使い方:param3d(x,y,z,[theta,alpha,leg,flag,ebox])
パラメータ:
Ø
x,y,z : 同じサイズの3 つのベクトル(パラメータ曲線の点)。
Ø
theta, alpha : 観測点の球座標の角度を与える実数値。
Ø
leg : "X@Y@Z"のように,一つの分離した空間として @で各軸のラベルを定義す
る文字列。
l
Ø
flag=[type,box] : plot3d と同意の type とbox 。
Ø
ebox : plot3d と同意。
contour – 3 次元平面上への等高線
使い方:contour(x,y,z,nz,[theta,alpha,leg,flag,ebox,zlev])
contour(x,y,z,nz,<opt_args>)
パラメータ:
Ø
x,y : サイズがn1 と n2 の2 つの実行ベクトル。
Ø
z : size (n1,n2)の実行列。関数の値。
Ø
nz : レベル値またはレベル数。
²
nz が整数である場合、その値は zmin から zmax まで均等に割り当てた
等高線の数であり、以下のようになります:
l
z= zmin + (1:nz)*(zmax-zmin)/(nz+1)
zmin と zmax のレベルは引かれません(一般に、それらはポイントから除
かれる)が、
l
[im,jm] = find(z == zmin);
l
plot2d(x(im)',y(jm)',-9,"000")
// or zmax
で加えることができます。
²
nz がベクトルの場合、nz(i) は i 番目の等高線の値となります。許容誤
差 ε を加えた zmin と zmax の等高線を見るには、以下のようにすると便
-9-
利です: nz=[ zmin+%eps,..,zmax-%eps] 。
Ø
<opt_args> : これは、key1=value1, key2=value2, ... の結果であり、key は
theta , alpha , leg , flag , ebox , zlev (以下参照)です。この場合、オーダー
に特別な意味はありません。
Ø
theta, alpha : 観測点の球面座標の偏角を与える実数。
Ø
leg : フィールド・セパレーターとして@で各軸のタイトルを定義する文字列。例え
ば"X@Y@Z"。
Ø
flag : サイズが3 の実ベクトルflag=[mode,type,box]
²
mode : 文字列(隠れている部分の処理)
l
mode>0:表面の隠れている部分は消し、表面は色の mode で色づけさ
れます。
l
mode=0:表面の隠れている部分が描かれます。
l
mode<0:表面の影だけが色またはパターン ID -mode で色づけされま
す。ID の意味を見るには、xset() を使います。
²
type : 整数(スケーリング)
l
type=0:現在の 3 次元スケーリングを使って、プロットします
(param3d , plot3d , contour ,plot3d1 の前にコールしてセットしま
す)。
l
type=1:面の比の最大値で次元のボックスを自動的に設定し直し、
境界はオプションの引数 ebox の値で指定します。
l
type=2:面の比の最大値で次元のボックスを自動的に設定し直し、
境界は与えられたデータでを使って計算します。
l
type=3:type=1 と同様に、オプションの ebox で与えられるボックスの
境界と等大の3 次元 の境界 。
l
type=4:type=2 と同様に、データから導出した境界と等大の3 次元
の境界。
l
type=5:type=1 と同様に、オプションの ebox で与えられるボックスの
境界と等大の拡張された3 次元 の境界。
l
type=6:type=2 と同様に、データから導出した境界と等大の拡張さ
れた3 次元 の境界。
²
box : 整数(プロットの外枠)
l
box=0 何もプロットの周りに引きませ。
l
box=1 実行しません (box=0 と同様)。
l
box=2 表面の後ろの軸だけが引かれます。
l
box=3 表面の周りに外枠が引かれ、タイトルが加えられます。
l
box=4 表面の周りに外枠が引かれ、タイトルと軸が加えられます。
- 10 -
²
ebox : flag の type が 1 の場合に使います。プロットの境界をベクトル
[xmin,xmax,ymin,ymax,zmin,zmax] として指定します。
²
l
zlev : 実数。
grayplot – 色を使った表面の 2 次元プロット
使い方:grayplot(x,y,z,[strf,rect,nax])
grayplot(x,y,z,<opt_args>)
パラメータ:
l
Ø
x,y : サイズがn1 と n2 の2 つの実行ベクトル。
Ø
z : size (n1,n2)の実行列。z(i,j) は点(x(i),y(j))での表面の値です。
Ø
<opt_args> : plot2d 参照。
Ø
trf,rect,nax : plot2d 参照。
contour – 関数で定義された 3 次元表面上への等高線
使い方:fcontour(xr,yr,f,nz,[theta,alpha,leg,flag,ebox,zlev])
fcontour(xr,yr,f,nz,<opt_args>)
パラメータ:
Ø
xr,yr : サイズがn1 と n2 の2 つの実行ベクトル。
Ø
f : 表面z=f(x,y) を定義する外部関数。xr,yr で指定した座標で最初に計算
します。このとき、制御はルーチンcontour に渡されます。
l
Ø
nz, : contour を参照してください。
Ø
theta,alpha,leg,flag,ebox,zlev : contour を参照してください。
Ø
<opt_args> : contour を参照してください。
hist3d – ヒストグラムの 3 次元表現
使い方:hist3d(f,[theta,alpha,leg,flag,ebox])
hist3d(list(f,x,y),[theta,alpha,leg,flag,ebox])
パラメータ:
Ø
f : ヒストグラムf(i,j)=F(x(i),y(j))で定義されたサイズ(m,n)の行列、x と y は
0:m と 0:n で得られる。
Ø
list(f,x,y) : f はヒストグラムf(i,j)=F(x(i),y(j))で定義されたサイズ(m,n)
の行列、x と y はサイズ(1,n+1) と (1,m+1)のベクトル。
Ø
l
theta,alpha,leg,flag,ebox : plot3d を参照。
secto3d-扇形から plot3d 互換データに面の表現の変換を行います。
使い方:[m[,x]]=secto3d(seclist,npas)
[m]=secto3d(seclist ,x)
パラメータ:
Ø
seclist :要素が行列のリスト
Ø
npas:整数
- 11 -
l
Ø
m : 行列
Ø
x : ベクトル
eval3dp – 3 次元パラメトリック曲面の面を計算
使い方:[z]=eval3d(fun,x,[y])
パラメータ:
2.3
Ø
fun :
Ø
x,y :
Ø
z :
2 次元グラフィックスと 3 次元グラフィックスの組み合わせ
l
geom3d – 3 次元プロット後 2 次元上に 3 次元からの投影
使い方:[x,y]=geom3d(x1,y1,z1)
パラメータ:
Ø
x1,y1,z1 : 同じサイズの実ベクトル(3 次元上の点)
Ø
x,y :x1,y1,z1 と同じサイズの実ベクトル
deff("[z]=surf(x,y)","z=sin(x)*cos(y)")
t=%pi*(-10:10)/10;
fplot3d(t,t,surf,35,45,"X@Y@Z")
[x,y]=geom3d(t,t,sin(t).*cos(t));
xpoly(x,y,"lines")
[x,y]=geom3d([0,0],[0,0],[5,0]);
xsegs(x,y)
xstring(x(1),y(1),"point (0,0,0)")
2.4 サブウインドウ
同じグラフィックウインドウに複数のプロットを作成することが可能です。
-->t=(0:.05:1)';st=sin(2*%pi*t);
-->xsetech([0,0,1,0.5]);
-->plot2d2("onn",t,st);
-->xsetech([0,0.5,1,0.5]);
-->plot2d3("onn",t,st);
-->xsetech([0,0,1,1]);
- 12 -