2016-07-01 7 views
1

私は比率として構成されたデータを持っています。したがって、赤と白と青のカラーマップを使用したいと思います。白は1に、赤と青はそれを囲みます。これを行う簡単な方法はありますか?Matlabカラーマップ対称約1

答えて

0

interp1を使用して、青色の白い読み取りカラーマップを簡単に作成できます。ここでは、入力として整数をとり、カラーマップを構築する少し無名関数があります。白の通話を制御するに

bwr = @(n)interp1([1 2 3], [0 0 1; 1 1 1; 1 0 0], linspace(1, 3, n), 'linear') 
colormap(bwr(64)); 

、あなたは軸のCLimを設定することをお勧めします。あなたは、白くしたい価値の周りにあなたのクライムを集中させたいでしょう。

set(gca, 'clim', [0 2]) 

とフル例として:

data = reshape(linspace(0, 100, 16), [4 4]) ./ 50; 
figure 
imagesc(data); 
colormap(bwr(64)); 
colorbar; 
set(gca, 'clim', [0 2]) 

enter image description here

あなたは比率を持っているので、0と1の間の値がすべての値に対し、圧縮され、そのかかわらず、覚えておいてください> 1は理論的には無限に進むことができます。一例として、 :

data = reshape(linspace(1, 200, 16), [4 4]) ./ 50; 

enter image description here

あなたはプロットする前に、あなたのデータをログ変換してから初期比の値を表すためにカラーバーの目盛りを変更することができますこれを修正するには。

LData = log(data); 
imagesc(LData) 
colormap(bwr(64)); 

cbar = colorbar(); 

set(gca, 'clim', [-1 1] * max(abs(LData(:)))) 

cticks = get(cbar, 'Ticks'); 
cticklabels = arrayfun(@(x)sprintf('%0.2f', x), exp(cticks), 'uniformoutput', false); 
set(cbar, 'TickLabels', cticklabels); 

enter image description here

+0

ブリリアント、これは動作します!どうもありがとうございます! – agold2121