ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Axes の色の範囲 — CLim プロパティ

はじめに

3 次元プロット関数の多くは、色を別のデータ次元として使用するグラフを作成します。たとえば、表面プロットは、表面の高さを色にマッピングします。色の範囲は、軸範囲を設定する方法と類似した方法で、色の次元の範囲を制御することができます。

Axes の CLim プロパティが、イメージ、パッチ、表面の CData から Figure のカラーマップへのマッピングを制御します。CLim は、カラーマップの最初の色にマッピングする CData 値 (cmin) と、カラーマップの最後の色にマッピングする CData 値 (cmax) を指定する 2 成分ベクトル [cmin cmax] です。

Axes の CLimMode プロパティが auto の場合、MATLAB® は Axes 内のすべてのグラフィックス オブジェクトの CData の範囲に CLim を設定します。ただし、CLim は、任意の値範囲にわたるように設定できます。これにより、1 つの Figure 内の個々の Axes は、Figure のカラーマップの別の部分を使用することができます。それぞれ別の Axes によって使用される、別の領域をもつカラーマップを作成することができます。

色の範囲に関する詳細情報は、caxis コマンドを参照してください。

1 つの Figure 内の複数のカラーマップのシミュレーション

1 つの Figure 内に 2 つの異なるイメージを表示するとします。イメージは、一般的にそれ自身のカラーマップをもちますが、Figure ごとに 1 つのカラーマップを指定することができます。解決策としては、2 つのカラーマップを連結し、その後、2 つのイメージがそのカラーマップの異なる部分にマッピングされるように、各座標軸の CLim プロパティを設定するという方法があります。

この例では、1 つの Figure に 2 つのイメージを表示し、各イメージのデータは、カラーマップの適切な場所にマップします。このカラーマップは、2 つのカラーマップを 1 つに連結して作成されたものです。2 つのイメージの下にある colorbar は、カラーマップ全体を示します。

例のすべてのコード

MATLAB ヘルプ ブラウザーを使用すると、以下が行えます。

色の範囲の計算

この例の重要な点は、各 Surface が適切な色を含むカラーマップの一部を使用するように CLim の値を計算することです。

CLim の新たな値を計算するには、以下の内容を把握する必要があります。

  • カラーマップの全体の長さ (CmLength)

  • 各 Axes に使用するカラーマップ スロットのはじめ (BeginSlot)

  • 各 Axes に使用するカラーマップ スロットの最後 (EndSlot)

  • Axes に含まれるグラフィックス オブジェクトの CData 値の最小および最大値、すなわち、CLimModeauto の場合に MATLAB が決定する Axes の CLim プロパティの値 (CDminCDmax)

まず、サブプロット領域を定義し、Surface をプロットします。

im1 = load('cape.mat');
im2 = load('flujet.mat');
ax1 = subplot(1,2,1); 
imagesc(im1.X) 
axis(ax1,'image')
ax2 = subplot(1,2,2);
imagesc(im2.X) 
axis(ax2,'image')

2 つのカラーマップを連結し、新しいカラーマップをインストールします。

colormap([im1.map;im2.map])

CLim の新しい値を計算するために必要なデータを求めます。

CmLength   = length(colormap);   % Colormap length
BeginSlot1 = 1;                  % Beginning slot
EndSlot1   = length(im1.map);    % Ending slot
BeginSlot2 = EndSlot1 + 1; 
EndSlot2   = CmLength;
CLim1      = get(ax1,'CLim');  % CLim values for each axis
CLim2      = get(ax2,'CLim');

CLim 値を計算するための関数定義

CLim に対する新しい値を計算すると、カラーマップの合計サイズを元に、各 Axes で使用するカラーマップの部分を決め、それに応じて、その Clim の範囲をスケーリングします。これを実行するための MATLAB 関数を定義することができます。

function CLim = newclim(BeginSlot,EndSlot,CDmin,CDmax,CmLength)
   % 				Convert slot number and range
   % 				to percent of colormap
   PBeginSlot    = (BeginSlot - 1) / (CmLength - 1);
   PEndSlot      = (EndSlot - 1) / (CmLength - 1);
   PCmRange      = PEndSlot - PBeginSlot;
   % 				Determine range and min and max 
   % 				of new CLim values
   DataRange     = CDmax - CDmin;
   ClimRange     = DataRange / PCmRange;
   NewCmin       = CDmin - (PBeginSlot * ClimRange);
   NewCmax       = CDmax + (1 - PEndSlot) * ClimRange;
   CLim          = [NewCmin,NewCmax];
end

入力引数は、上記の箇条書きリストで確認できます。この関数は、まず、特定の座標軸に使用するカラーマップの部分はカラーマップ全体の何パーセントになるのか (PCmRange) を計算し、その後、その座標軸の CData 範囲を前提として、カラーマップのその部分を使用するのに必要な CLim の範囲を計算します。最後に、計算した CLim 範囲に必要な最小値と最大値を決め、これらの値を出力します。これらの値は、与えられた Axes の色の範囲です。

関数の使用

関数 newclim を使用して、各 Axes の CLim 値を設定します。次のステートメントをみてみましょう。

set(ax1,'CLim',newclim(BeginSlot1,EndSlot1,CLim1(1),...
		CLim1(2),CmLength))

は、表面がカラー スロット 65 からカラー スロット 120 までを使用するように、最初の座標軸の CLim 値を設定します。ライティングされた表面は、それより下位の 64 個のスロットを使用します。その CLim 値も同様にリセットする必要があります。

set(ax2,'CLim',newclim(BeginSlot2,EndSlot2,CLim2(1),...
		CLim2(2),CmLength))

関数の機能方法

MATLAB を使用すると、座標軸の CLim プロパティにはどのような値でも指定できます。その値が座標軸に表示されるグラフィックス オブジェクトの CData に対応していない値であってもかまいません。カラーマップ内の最初の色と最後の色に対応する CData 値が実際に存在しているかどうかにかかわらず、最小 CLim 値は常にカラーマップ内の最初の色にマッピングされ、最大 CLim 値は常にカラーマップ内の最後の色にマッピングされます。このため、オブジェクトの実際の CData の最小値または最大値を超えた CLim の値を指定すると、MATLAB はカラーマップの一部のみを使用してオブジェクトを着色します。

関数 newclim は、グラフィックス オブジェクトの実際の CData 値を、指定した最初のカラーマップ スロットと最後のカラーマップ スロットにマッピングする CLim の値を計算します。これは計算した CLim 値をもつ "仮想" のグラフィックス オブジェクトを定義することによって行われます。

この情報は役に立ちましたか?