matlab可視化関数の備忘録
行列データ (2次元配列)
surf() / mesh()
matlabで行列データ(2次元配列)を3次元的に可視化する際によく用いられるのは,surf()やmesh()だと思います.例としてpeaksで生成した行列を入力として実行すると次のような図が得られます.
.mat
%% peaksデータ
data = peaks(50); % 50×50の行列データ(Z値)
% surf描画
figure("Color","w");
surf(data); % ハイトマップとして立体的に可視化する
% mesh描画
figure("Color","w");
mesh(data); % エッジのみを描画する
% ※内部的にはどちらもsurface()のパラメータを変えているだけ
上のように単一の行列を引数に与えた場合はZDataとして扱われますが,X/YDataも指定することが出来ます.
↓ xyz全てを指定した描画の例
.mat
[x,y,z] = sphere(50); % create a sphere
surf(x,y,z); % plot spherical surface
quiver3()
また,面の法線などの空間ベクトルを描画したいときにはquiver3を用います.
.mat
% ダミーデータ
[X,Y] = meshgrid(-pi/2:pi/8:pi/2,-pi/2:pi/8:pi/2); % 単調増加の格子点xy座標
Z = sin(X) + cos(Y);
[U,V,W] = surfnorm(Z); % 面の法線ベクトル
% 可視化
quiver3(X,Y,Z,U,V,W,'r')
axis equal
ベクトルデータ (1次元配列)
plot3()
3次元のラインプロットができます.LineSpecを指定することで実線,破線,点などの描画を切り替えられます.
.mat
% ダミーデータ(行ベクトル)
t = 0:pi/50:10*pi;
st = sin(t);
ct = cos(t);
% 可視化
plot3(st,ct,t);
その他
matlabでは行列やベクトルデータの要素にアクセスする際,単一の要素だけではなく,"変数(〇:〇)"のような形で部分要素を取得することが出来ます.自前で実装数必要がないため,可視化関数にデータを渡すときにも便利です.
.mat
% ダミー配列の生成
matrix = zeros(5,10); % 5行10列の配列 (0で初期化)
% 配列要素へのアクセス (※"[]"ではなく"()"を使う)
newValue = data(3,8); % スカラー
newVector = data(1:3:, 1); % 3行1列の行ベクトル
newMatrix = data(1:3,8:end); % 3行3列の行列
% 可視化関数の呼び出しに利用
surf(data(1:3,8:end));