表面プロット データをカラーマップに関連付ける方法
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);