| Graphics | ![]() |
例 - Figure内の複数のカラーマップのシミュレーション
同じFigure内に2つの異なるSurfaceを表示し、各Surfaceを異なるカラーマップでカラーリングすると仮定します。2つのカラーマップを連結し、各AxesのCLimプロパティをカラーマップの異なる部分に写像するように設定することによって、2種類のカラーマップの効果を創り出すことができます。
この例では、同じ地形データから2つのSurfaceを作成します。1つは典型的な地図帳のカラー構成を使用します。すなわち海洋に対しては青のカラーリング、陸に対しては緑のカラーリングを使います。別のSurfaceは立体感を出すために光源を与えて照明します。このような照明には暗い色から明るい色まで単調に変化するカラーマップが必要です。
この例の重要な点は、各Surfaceが適切なカラーを含むカラーマップの一部を使用するように、 CLimに対する値を計算することです。
CLimに対する新たな値を計算するためには、以下の内容を把握する必要があります。
CmLength)BeginSlot)。EndSlot)。CData値、すなわち、CLimModeがautoの場合に、MATLABが決定するAxesのCLim プロパティの値(CDminおよびCDmax)。はじめに、サブプロット領域を定義し、Surfaceをプロットします。
ax1 = subplot(2,1,1); view([0 80]) surf(topodata) shading interp ax2 = subplot(2,1,2),; view([0 80]); surfl(topodata,[60 0]) shading interp
2つのカラーマップを連結し、新たなカラーマップを設定します。
colormap([Lightingmap;Atlasmap]);
CLimに対する新たな値を計算するために必要なデータを求めます。
CmLength = size(get(gcf,'Colormap'),1);% カラーマップの長さ
BeginSlot1 = 1; % スロットの初め
EndSlot1 = size(Lightingmap,1); % スロットの最後
BeginSlot2 = EndSlot1+1;
EndSlot2 = CmLength;
CLim1 = get(ax1,'CLim');% 各軸の対する CLim 値
CLim2 = get(ax2,'CLim');
CLim値を計算するための関数定義
CLimに対する新たな値を計算すると、カラーマップの合計サイズに関連して各Axesで使いたいカラーマップの一部を決定し、それに応じて、そのClim範囲をスケーリングします。これを実行するためのMATLAB関数を定義することができます。
function CLim = newclim(BeginSlot,EndSlot,CDmin,CDmax,CmLength) % スロット番号とレンジをカラーマップに変換 PBeginSlot = (BeginSlot - 1) / (CmLength - 1); PEndSlot = (EndSlot - 1) / (CmLength - 1); PCmRange = PEndSlot - PBeginSlot; % 新しいCLim値の最大値と最小値とレンジを決定 DataRange = CDmax - CDmin; ClimRange = DataRange / PCmRange; NewCmin = CDmin - (PBeginSlot * ClimRange); NewCmax = CDmax + (1 - PEndSlot) * ClimRange; CLim = [NewCmin,NewCmax];
前ページの黒丸を付けたリストで、入力引数を確認します。M-ファイルは、はじめに特定のAxesに対して使用したい全カラーマップの割合(PCmRange)を計算し、それから与えられたAxesのCData範囲に対してカラーマップのその部分を使用するのに必要なCLim範囲を計算します。最後に、計算したCLim範囲に必要な最小値と最大値を決定し、これらの値を出力します。これらの値は与えられたAxesに対するカラー範囲です。
M-ファイルの使用
M-ファイルnewclimを使用して各AxesのCLim値を設定します。ステートメント
set(ax1,'CLim',newclim(65,120,clim1(1),clim1(2)))
は、最初のAxesに対するCLim値を設定し、Surfaceはカラースロット65から120までを使用します。照明が与えられたSurfaceは、その下の64スロットを使用します。そのCLim値も同様にリセットする必要があります。
set(ax2,'CLim',newclim(1,64,clim1(1),clim1(2)))
関数機能
MATLABでは、AxesのCLimプロパティに対する値が、Axesに表示されるグラフィックスオブジェクトのCDataに対応しなくても、それらに任意の値を設定することができます。MATLABは、常に最小のCLim値をカラーマップの最初のカラーに写像し、最大のCLim値をカラーマップの最後のカラーに写像しますが、これらのカラーに対応するCData値が実際に存在するかどうかには関係ありません。従って、オブジェクトの実際のCDataの最小値と最大値を越える値をCLimに対して設定すると、MATLABはカラーマップを部分的に使ってオブジェクトにカラーリングします。
M-ファイルnewclimは、グラフィックスオブジェクトの実際のCData値を、設定した最初と最後のカラーマップスロットに写像する値をCLimに対して計算します。計算したCLim値をもつ"仮想"のグラフィックスオブジェクトを定義することによって、これを行います。つぎの図はこの考え方を示したものです。この図では、Surface形状へのカラーの写像を視覚化しやすくするために、2つのSurfaceの側面図を示しています。仮想Surfaceを左側に、実際のSurfaceを右側に示しています。中央にあるのは、Figureのカラーマップです。
実際のSurfaceのCLim値は[0.4 -0.4]です。スロット65から120までを使って、このSurfaceにカラーリングするために、newclimは[0.4 -1.4269]の新たなCLim値を計算しています。左側の仮想Surfaceはこれらの値を表しています。
| Axesのカラー範囲 - CLimプロパティ | プロットに使用するLineのカラーの定義 | ![]() |