我在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');
...我只得到一种代表水的颜色,它会根据最大深度而变化。如何使用颜色示例创建显示所有四个类别的静态图例:
我能想到的唯一解决方案就是在右边的蓝色颜色的轴上(在那里它不会被注意到的地方)制作3个整齐的小补丁,然后使传说指向它们而不是水面。但那将是一个真正糟糕的解决方案......
答案 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'});