gpt4 book ai didi

matlab - 制作静态图例,独立于实际剧情

转载 作者:行者123 更新时间:2023-12-05 01:12:24 25 4
gpt4 key购买 nike

我在 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 个整齐的小补丁,然后让图例指向它们而不是水面。但那将是一个真正糟糕的解决方案......

最佳答案

你可以显示一个colorbar():

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'});

关于matlab - 制作静态图例,独立于实际剧情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8873448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com