表面プロット データをカラーマップに関連付ける方法
surf や mesh などの関数を使用して表面プロットを作成する場合、関数 colormap を呼び出すことでカラー スキームをカスタマイズできます。外観をきめ細かく制御する場合は、色の方向やパターンを表面全体で変更できます。このカスタマイズでは、表面とカラーマップ間の関係を制御する配列の値を変更する必要があります。
表面とカラーマップ間の関係
Surface オブジェクトの CData プロパティには、プロット内の特定の場所とカラーマップ内の色を関連付けるインデックス配列 C が含まれています。C は、表面 z = f(x,y) と次の関係にあります。
CはZと同じサイズで、Zは表面上の各グリッド点の f(x,y) の値を含む配列である。C(i,j)の値は、表面上のグリッド位置(i,j)の色を制御する。既定では、
CはZ(高さによって変化する色に対応) と等しい。既定では、
Cの範囲がカラーマップ配列の行数に線形にマッピングされる。
たとえば、Z = X + Y の 3 行 3 列のサンプリングは、N 個のエントリを含んだカラーマップと次の関係にあります。

最も小さい値 (-2) がカラーマップの最初の行にマッピングされている点に注目してください。最大値 (2) はカラーマップの最後の行にマッピングされています。C の中間の値はカラーマップの中間の行に線形にマッピングされます。
メモ
前述の表面プロットは、色がどのように表面の頂点に割り当てられるかを示しています。ただし、既定の動作は、単色でパッチ面を塗りつぶすことです。その単色は、周囲の頂点に割り当てられた色に基づきます。詳細については、FaceColor プロパティの説明を参照してください。
色の方向またはパターンの変更
既定値の C=Z を使用している場合、色は Z の変化とともに変わります。
[X,Y] = meshgrid(-10:10); Z = X + Y; s = surf(X,Y,Z); xlabel('X'); ylabel('Y'); zlabel('Z');

この動作は、表面を作成するときに C を指定することで変更できます。たとえば、この表面の色は X とともに変化します。
C = X; s = surf(X,Y,Z,C); xlabel('X'); ylabel('Y'); zlabel('Z');

あるいは、CData プロパティを直接に設定できます。次のコマンドによって、色は Y とともに変化するようになります。
s.CData = Y;

色は、単一の次元での変化に従う必要はありません。実際、CData には、Z と同じサイズの "任意" の配列を指定できます。たとえば、次の平面の色は sinc 関数の形状に従います。
R = sqrt(X.^2 + Y.^2) + eps; s.CData = sin(R)./(R);
