2016-07-01 50 views
1

我有數據構建比例,因此我想使用紅色/白色/藍色的地圖,其中白色分配給1和紅色和藍色包圍它。是否有捷徑可尋?Matlab colormap對稱約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