3

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

我使用一个if语句来改变colormap水的深度,由两个阈值确定(在阈值以下的代码中由数组表示C

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

我能想到的唯一解决方案是在轴的某处(不会被注意到的地方)用正确的蓝色制作 3 个整洁的小补丁,然后将图例指向它们而不是水面。但这将是一个真正糟糕的解决方案......

4

1 回答 1

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'});
于 2012-01-16T05:54:59.317 回答