MATLABのグラフィック関数
はじめに
MATLABはグラフィック関数を用いてデータの可視化をすることができます。 いろいろあるのでお勉強のためにドキュメンテーションからグラフィック関数とその使い方をまとめます。
MATLABのグラフィックの詳細は次のページに詳細が載っています。
ラインプロット
線形2次元プロット
$x$を$[-2\pi, 2pi]$の間に線形に等間隔な100個の点として、sin関数、cos関数を描画します。 等間隔に100個の点を用意するためにはlinspace関数を使います。点の数を変更したい場合には、linspace(-2\pi, 2pi, 150)のように第3引数に用意したい点数を渡します。
x = linspace(-2*pi,2*pi); y1 = sin(x); y2 = cos(x); figure plot(x,y1,x,y2)
グラフの詳しい指定方法についてはここの内容を見てください。
異なるY軸を使用した2つのデータのプロット
plotyy(X1, Y1, X2, Y2)を用いてY1をX1をy軸の左側にラベリングして、Y2をX2をy軸の右側にラベリングしてプロットします。
x = 0:0.01:20; y1 = 200*exp(-0.05*x).*sin(x); y2 = 0.8*exp(-0.5*x).*sin(10*x); [hAx,hLine1,hLine2] = plotyy(x,y1,x,y2); hLine1.LineStyle = '--'; hLine2.LineStyle = ':';
plotyyでxとyを指定した後に、使用するグラフを指定することができます。次の例では(x,y1)についてはplot関数を使用し、(x,y2)についてはstem関数を使用しています。
x = 0:0.1:10; y1 = 200*exp(-0.05*x).*sin(x); y2 = 0.8*exp(-0.5*x).*sin(10*x); figure plotyy(x,y1,x,y2,'plot','stem')
離散データのプロット
離散データ列
stem(X, Y)はXで指定した値に、データ列Yをプロットします。そのため、XとYのベクトルまたは行列のサイズは同じでなければなりません。Xは行ベクトルまたは列ベクトルで、Yはlength(X)行の行列でなければなりません。
X = linspace(0,2*pi,50)'; Y = [cos(X), 0.5*sin(X)]; stem(Y)
階段状プロット
stem関数と同様の形式で階段状のグラフをプロットします。
X = linspace(0,4*pi,50)'; Y = [0.5*cos(X), 2*cos(X)]; figure stairs(X,Y)
散布図
scatter(x, y)で、ベクトルx, yで指定された位置に散布図を作成することができます。
x = linspace(0,3*pi,200); y = cos(x) + rand(1,200); a = 25; c = linspace(1,10,length(x)); scatter(x,y,a,c,'filled')
plotmatrix(X)でYの列に対するXの列の散布図を含む散布図プロット行列を作成できます。 行列の(i,j)成分のサブプロットはj列目に対するi列目の散布図です。体格成分には各列のヒストグラムプロットが配置されます。
X = randn(50,3); plotmatrix(X)
plotmatrix(X, Y)でYの列に対する X の列の散布図を含む小座標軸の行列を作成できます。
X = randn(50,3); Y = reshape(1:150,50,3); plotmatrix(X,Y)
等高線図とベクトル場
等高線
等高線はcontour関数を用いて描画します。
x = linspace(-2*pi,2*pi); y = linspace(0,4*pi); [X,Y] = meshgrid(x,y); Z = sin(X)+cos(Y); contour(X,Y,Z)
ベクトル場
速度ベクトルをfeather(U,V)で描画できます。フェザープロットは、横軸に沿った等間隔の点を原点とするベクトルを描画します。それぞれのベクトルの原点を基準としたベクトル成分を表します。 UとVで指定されるベクトルを表示し、Uは相対的な座標としてのx成分、Vは相対的な座標としてのy成分を含んでいます。
thetaの方向を表すフェザープロットを作成します。featherは直交座標を使用するためpol2cartを使用してthetaとrを直交座標に変換します。
theta = -pi/2:pi/16:pi/2; r = 2*ones(size(theta)); [u,v] = pol2cart(theta,r); feather(u,v)
また、quiver(x, y, u, v)でx,yの各要素と矢印を組み合わせることができます。
[x,y] = meshgrid(0:0.2:2,0:0.2:2); u = cos(x).*y; v = sin(x).*y; quiver(x,y,u,v)
等高線図とベクトル場の表示
$ z = x \exp( -x^{2} -y^{2} ) $の等高線と勾配ベクトルを描画します。勾配ベクトルはgradient関数によって得ることができます。
$$ \nabla \boldsymbol{F} = \frac{\partial \boldsymbol{F}}{\partial x} \boldsymbol{i} + \frac{\partial \boldsymbol{F}}{\partial y} \boldsymbol{j} $$
% z = x exp( -x^2 - y^2)の等高線を描画 [X,Y] = meshgrid(-2:0.2:2); Z = X .* exp(-X.^2 - Y.^2); contour(X,Y,Z,10) % 勾配計算 [U, V] = gradient(Z, 0.2, 0.2); hold on quiver(X, Y, U, V); hold off