はじめに

MATLABを利用すると、3次元データの可視化を簡単に行うことができます。その中でも代表的な手法が表面プロット (surface plot)メッシュ プロット (mesh plot) です。曲面や地形、さらには関数の3D形状を可視化したいときに大変便利です。本記事では、MATLABでの表面プロットとメッシュプロットの作成方法を解説していきます。

キーワード:MATLAB, 表面プロット, メッシュ プロット, surf, mesh, meshgrid, 3次元可視化, カラーマップ, 等高線

1. 基礎となるグリッドデータの準備

1.1 meshgrid の活用

3Dの可視化をする場合、まずx方向とy方向の座標を定義して、それらから格子点(グリッド)を作り、その上で関数を評価します。MATLABでは meshgrid 関数を使うことで、2次元の座標行列を手軽に生成できます。

% x と y の値域を定義
x = linspace(-5,5,50);
y = linspace(-5,5,50);

% 2次元格子を作成
[X,Y] = meshgrid(x,y);

% 関数 z = f(x, y) の例: Z = X^2 + Y^2
Z = X.^2 + Y.^2;

上記では、X, Y が 50×50 の行列となり、それぞれ格子点の x座標・y座標が格納されます。Z は各格子点に対応する関数の値です。

図1.グリッドデータの作成

2. 表面プロット (Surface Plot)

2.1 surf 関数

表面プロットは、surf 関数を使うと作成できます。上で作成した X, Y, Z を使って、以下のように描画します。

% x と y の値域を定義
x = linspace(-5,5,50);
y = linspace(-5,5,50);

% 2次元格子を作成
[X,Y] = meshgrid(x,y);

% 関数 z = f(x, y) の例: Z = X^2 + Y^2
Z = X.^2 + Y.^2;

% 表面プロット
figure;
surf(X, Y, Z);
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
title('Surface Plot of Z = X^2 + Y^2');

これで、Z = X^2 + Y^2 の三次元曲面が可視化されます。surf では、各格子点が**カラフルな“面”**で結ばれて表示されるのが特徴です。

図2.表面プロット

2.2 ライティングとカラーマップ

表面プロットは、ライティングやカラーマップを設定すると、より見やすくなります。

% x と y の値域を定義
x = linspace(-5,5,50);
y = linspace(-5,5,50);

% 2次元格子を作成
[X,Y] = meshgrid(x,y);

% 関数 z = f(x, y) の例: Z = X^2 + Y^2
Z = X.^2 + Y.^2;

% 表面プロット
figure;
surf(X, Y, Z);
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
title('Surface Plot of Z = X^2 + Y^2');

% カラーマップ等の追加
shading interp;      % 面を滑らかに補間
colormap jet;        % カラーマップを "jet" に変更
colorbar;            % カラーバーを表示

さらに、光源を設定して立体感を強調したい場合は、camlightlighting gouraud などを用いることも可能です。

図3.カラーマップ等で見やすく表示

3. メッシュ プロット (Mesh Plot)

3.1 mesh 関数

メッシュプロットは、格子状のワイヤフレームによる3次元表示です。以下のようにコマンドを実行すると、ラインのみで構成された三次元グラフが得られます。

% x と y の値域を定義
x = linspace(-5,5,50);
y = linspace(-5,5,50);

% 2次元格子を作成
[X,Y] = meshgrid(x,y);

% 関数 z = f(x, y) の例: Z = X^2 + Y^2
Z = X.^2 + Y.^2;

% 格子状に表示
figure
mesh(X, Y, Z);
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
title('Mesh Plot of Z = X^2 + Y^2');

表面プロットよりもワイヤフレームの構造が際立つため、等高線のようにグリッドを明確に見せたい場合に向いています。

図4.メッシュプロット

3.2 meshc, surfc などの派生関数

  • meshc : メッシュプロットと同時に等高線を表示
  • surfc : サーフェスプロットと等高線を表示
% x と y の値域を定義
x = linspace(-5,5,50);
y = linspace(-5,5,50);

% 2次元格子を作成
[X,Y] = meshgrid(x,y);

% 関数 z = f(x, y) の例: Z = X^2 + Y^2
Z = X.^2 + Y.^2;

% 等高線の表示1
figure;
meshc(X, Y, Z);
title('Mesh with Contours');

% 等高線の表示2
figure;
surfc(X, Y, Z);
title('Mesh with Contours');

等高線を同時に表示することで、z方向の値の分布がよりわかりやすくなります。

図5.等高線の表示

4. 便利な設定やカスタマイズ例

4.1 ビューポイントの変更

MATLABでは、view 関数を用いて視点を切り替えることが可能です。例えば、view(2) とすると真上(2D俯瞰)、view(3) とすると初期の3Dビューに戻せます。

% x と y の値域を定義
x = linspace(-5,5,50);
y = linspace(-5,5,50);

% 2次元格子を作成
[X,Y] = meshgrid(x,y);

% 関数 z = f(x, y) の例: Z = X^2 + Y^2
Z = X.^2 + Y.^2;

% 表面プロット
figure;
surf(X, Y, Z);
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
title('Surface Plot of Z = X^2 + Y^2');

view(3);     % 3次元ビュー

% 表面プロット
figure;
surf(X, Y, Z);
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
title('Surface Plot of Z = X^2 + Y^2');

view(2);     % 真上からの2次元ビュー(等高線表示に近い)

図6.ビューポイントの変更

4.2 軸の比率調整

3Dグラフでは、x・y・zのスケール感を変更すると見やすくなる場合があります。その場合は daspectaxis を活用します。

% x と y の値域を定義
x = linspace(-5,5,50);
y = linspace(-5,5,50);

% 2次元格子を作成
[X,Y] = meshgrid(x,y);

% 関数 z = f(x, y) の例: Z = X^2 + Y^2
Z = X.^2 + Y.^2;

% 表面プロット
figure;
surf(X, Y, Z);
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
title('Surface Plot of Z = X^2 + Y^2');

daspect([1 1 2]);  % z軸を圧縮
axis tight;          % データ範囲に合わせて軸を自動調整

図7.軸の比率調整

4.3 タイトル・ラベル・カラーバーなど

ラベルやカラーバーをつけることでグラフの情報量が増え、可読性が上がります。

% x と y の値域を定義
x = linspace(-5,5,50);
y = linspace(-5,5,50);

% 2次元格子を作成
[X,Y] = meshgrid(x,y);

% 関数 z = f(x, y) の例: Z = X^2 + Y^2
Z = X.^2 + Y.^2;

% 表面プロット
figure;
surf(X, Y, Z);
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
title('My 3D Plot');
colorbar;               % 色の基準を示すカラーバー

図8.カラーバーの追加

まとめ

本記事では、MATLABで作成できる表面プロットとメッシュ プロットの基本について紹介しました。

  1. グリッドデータの作成 (meshgrid)
  2. 表面プロット (surf) で色付きの連続面を表示
  3. メッシュ プロット (mesh) でワイヤフレーム状に表示
  4. ライティングやカラーマップ、視点変更などの追加設定でカスタマイズ

3次元可視化は、データの持つ全体像を理解するのに大変役立ちます。曲面の形状や傾向を一目で捉えられるようになるため、シミュレーション結果や数値解析の理解度が向上するでしょう。

さらなる学習リソース

  • MathWorks公式ドキュメント(日本語)
    3次元可視化とサーフェスプロット
  • MATLAB Answers (Q&Aフォーラム)
    3Dプラットに関する具体的な質問・回答事例を豊富に掲載
  • YouTube MathWorks公式チャンネル
    表面プロットやメッシュ プロットを動画で学べるチュートリアルが充実

キーワード再掲:MATLAB, 表面プロット, メッシュ プロット, surf, mesh, meshgrid, 3次元可視化, カラーマップ, 等高線