MATLABで三次元プロットを作成する
はじめに
いくつかの定点で時間経過とともに計測,スペクトルを測定しているといった場合に三次元プロットや等高線図を作成するとわかりやすい.今回はMATLABを使って三次元プロットを作成する方法を解説します.
対象データ
取り扱うデータは次のような形式で保存されているものとします
x y z
a1 b1 c1
a1 b2 c2
a1 b3 c3
a1 b4 c4
a1 b5 c5
a2 b1 c6
a2 b2 c7
a2 b3 c8
a2 b4 c9
a2 b5 c10
位置(a1, a2, ...)と時間(b1, b2, ...)に対して測定値あるいは計測値(c1, c2, ...)が得られた場合を想定しています.例えば化学だと,紫外可視吸収スペクトルの時間変化などいろいろな場面が想定されます.
コマンド
MATLAB上で以下のコマンドにより作図されます.解説はのちほど
>> data = xlsread('abc.xlsx');
>> x=data(:,1);
>> y=data(:,2);
>> z=data(:,3);
>> xlin = linspace(min(x),max(x),30);
>> ylin = linspace(min(y),max(y),30);
>> [X,Y]=meshgrid(xlin,ylin);
>> Z=griddata(x,y,z,X,Y);
>> mesh(X,Y,Z);
>> hold on
>> plot3(x,y,z,'o','Color','b','MarkerSize',10,'MarkerFaceColor','#D9FFFF')
解説
>> data = xlsread('abc.xlsx');
% 以下はコマンドは実行されず,直前のコマンドの説明という意味です
% abc.xlsxファイルを読み込んでdataという名前で,tableとしてワークスペースに格納.コマンド xlsread は xls拡張子ファイルを読み込むということだと思います.【 ; 】は次に進むという意味
>> x=data(:,1);
% data tabel内のすべての行【 : 】の1列【 1 】を【 x 】とする
>> y=data(:,2);
>> z=data(:,3);
ここまでのコマンドでデータ内の観測点 x, y と計測値(観測値) z を指定していることになる
>> xlin = linspace(min(x),max(x),30);
% linはlinearの略か?=以下のものを線形のx成分と定義する
linespaceは線形の領域を定義 min(x), max(x)はそれぞれ xの最小,最大値でその領域を30に区切るというコマンド
30という数字は任意です
x軸を決めている
>> ylin = linspace(min(y),max(y),30);
% y軸を決めている
>> [X,Y]=meshgrid(xlin,ylin);
% 定義した xlin, ylin 線形領域に網目のグリッドを定める
[X,Y]は線形区間 xlin, ylinで定義される
面を決めている
>> Z=griddata(x,y,z,X,Y);
% 散布データを(x,y,z,X,Y)に内挿する
z は x, y で紐付けられた値で x, y, z はすでに定義されているので,例えば
(1番目のx, 1番目のy)…(13番目のx, 13番目のy)…で定義された面にzを挿入するという意味だと思われる
3次元に拡張している
>> mesh(X,Y,Z);
% 表面プロット.データを表面として表す
>> hold on
% プロットを保持する
>> plot3(x,y,z,'o','Color','b','MarkerSize',10,'MarkerFaceColor','#D9FFFF')
% 三次元に拡張された空間にデータx, y, z 座標をプロットする
‘o’ 以下はマーカーの形状や色・塗りつぶす色を指定している
その他
>> clf コマンドで図が消去される
例えば x が位置で y が分布関数,z が減衰曲線といったプロットも作成できます.一度プロットができればさまざまな応用ができると思います
まとめ
MATLABはコマンド処理でいろいろできるのでぜひお試しください