読者です 読者をやめる 読者になる 読者になる
MENU

MATLABのグラフィック関数

MATLAB

はじめに

MATLABはグラフィック関数を用いてデータの可視化をすることができます。 いろいろあるのでお勉強のためにドキュメンテーションからグラフィック関数とその使い方をまとめます。

MATLABのグラフィックの詳細は次のページに詳細が載っています。

jp.mathworks.com

ラインプロット

線形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