3

私はMatlabで2つの表面をプロットしています.一定の地面レベルと時間とともに変化する水位です.

ifステートメントを使用しcolormapて、2 つのしきい値によって決定される深さの増加に伴って水の を変更します (以下のコードでは、しきい値は配列で表されます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 つのしきい値の間では暗くなり、しきい値 2 を超えるとさらに暗くなります。

私の問題は、伝説を描くときです

legend('ground','water');

... 水を表す色は 1 つしかなく、最大深度に応じて変化します。色の例で 4 つのカテゴリすべてを示す静的な凡例を作成するにはどうすればよいですか。

  1. (茶) 地
  2. (水色) 閾値未満の水位 1
  3. (スタンダードブルー) 閾値間の水位
  4. (濃い青) しきい値 2 を超える水位

私が考えることができる唯一の解決策は、適切な青色で軸のどこかに(気付かれない場所に)3つのきれいな小さなパッチを作成し、凡例を水面ではなくそれらに向けることです. しかし、それは本当にくだらない解決策になります...

4

1 に答える 1

0

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