制作静态图例,与实际情节无关

时间:2012-01-15 21:18:48

标签: matlab legend color-mapping legend-properties

我在Matlab中绘制了两个表面,地面是恒定的,水位随时间变化。

我使用if语句来更改水的colormap,深度增加,由两个阈值决定(在阈值以下的代码中由数组C表示)< / p>

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

结果是,当水位低于阈值1时,它是浅蓝色,在两个阈值之间变得更暗,而在阈值2之上它变得更暗。

我的问题是当我绘制传奇时

legend('ground','water');

...我只得到一种代表水的颜色,它会根据最大深度而变化。如何使用颜色示例创建显示所有四个类别的静态图例:

  1. (棕色)地面
  2. (浅蓝色)水位低于阈值1
  3. (标准蓝色)阈值之间的水位
  4. (深蓝色)水位高于阈值2
  5. 我能想到的唯一解决方案就是在右边的蓝色颜色的轴上(在那里它不会被注意到的地方)制作3个整齐的小补丁,然后使传说指向它们而不是水面。但那将是一个真正糟糕的解决方案......

1 个答案:

答案 0 :(得分: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'});