2012-01-15 90 views
3

我在Matlab中繪製了兩個曲面,這是恆定的地面高度和隨時間變化的水位。製作一個靜態圖例,獨立於實際繪圖

我使用if語句來改變水的colormap隨着深度的增加,由兩個閾值來確定

if max(C(:)) < 2 
    colormap([0.5 0.25 0 ; 0 0.8 1]); 
elseif max(C(:)) >= 2 && max(C(:)) < 3 
    colormap([0.5 0.25 0 ; 0 0.8 1 ; 0 0.5 0.65]); 
elseif max(C(:)) >= 3 
    colormap([0.5 0.25 0 ; 0 0.8 1 ; 0 0.5 0.65 ; 0 0.2 0.3]); 
end 

其結果是,當(在下面的代碼閾值被由陣列C表示)水位低於閾值1時,它是淡藍色,在兩個閾值之間它變得較暗,並且在閾值2以上它變得較暗。

我的問題是,當我畫的傳說

legend('ground','water'); 

...我只得到代表水一個顏色,並根據最大深度變化。如何使顯示所有四類顏色例如靜態傳說:

  1. (棕色)地面
  2. (淺藍色)閾值1
  3. (藍標)水閾值
  4. 之間的水平之下水位
  5. (深藍色)水位高於閾值2

我能想到在右側藍色正在3個整潔的小補丁的地方由軸(它不會被注意到),然後唯一的解決辦法制造傳說指向他們而不是水面。但是,這將是一個真正糟糕的解決方案...

回答

0

可以顯示彩條():

C = [1 2 3 4]; 

if max(C(:)) < 2 
    colormap([0.5 0.25 0 ; 0 0.8 1]); 
elseif max(C(:)) >= 2 && max(C(:)) < 3 
    colormap([0.5 0.25 0 ; 0 0.8 1 ; 0 0.5 0.65]); 
elseif max(C(:)) >= 3 
    colormap([0.5 0.25 0 ; 0 0.8 1 ; 0 0.5 0.65 ; 0 0.2 0.3]); 
end 

% whatever to make your plot 
imagesc(C); 

% display a colorbar 
cb_ax = colorbar; 

% label it appropriately 
set(cb_ax, 'YTick', [1:4]*3/4+5/8, 'YTickLabels', {'A', 'B', 'C', 'D'}); 
+0

謝謝您的回答。它可以正常工作,現在我可以看到圖表上的所有顏色,但當我的模擬不包含深水時,仍然無法看到深水的顏色。無論如何,我很高興我到目前爲止:) – 2012-01-17 09:47:52