2012-01-15 93 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