5

値の対数スケール (行列Z ) とラベル付きの等高線図として表示したいデータがあります。これは私がそれを行う方法です:

[C, h1] = contourf(X, Y, log(Z)); 
clabel(C,h1);

ここに私の結果があります:

画像

私の質問は、等高線に正しいラベルを付けるにはどうすればよいですか? ここで説明されているようなカラーバーは必要ありません。

編集:これが私の例です:

X = 1:1:20;
Y = X; 
Z = zeros(size(Y));
for i = 1:size(Y,2);
    Z(i, :) = 10^i;
end

[C, h1] = contourf(X, Y, Z); 
clabel(C,h1);

私の本当のデータは次のようになります。 真実

任意の等高線のラベルを設定できますが、データが指数関数的であるため表示されません (ちなみに、このプロットで表示されているラベルは、実際に取得したいラベルです。次のプロット)。

ここで、私のデータは指数関数であるため、データを適切に表示するには、表示された値 (マトリックス Z) に対数スケールを使用する必要があります。これが私のやり方です(おそらく別のより良い方法があるかもしれません、私にはわかりません、他に何も見つけていません):

[C, h1] = contourf(X, Y, log(Z)); 
clabel(C,h1);

私の写真は次のようになります。 ログデータ

そして、今はよく見えます-私のデータがどのように変化するかを見ることができます. ただし、ラベルが間違っています。好きなベクトルに設定できるようになりました。

  1. 0:5:45 - 今持っているものを正確に取得します。
  2. 10^[0:5:45] (これらのラベルが必要です)。しかし、プロットされたデータは(0, 45)になりました (対数を計算したため)。そのため、ほとんどのラベルは表示されず (データ範囲を超えています)、表示されるラベルは間違った場所に配置されます。

理想的には、次のようなことができるようになりたいです。

[C, h1] = contourf(X, Y, Z, 'ZScale', 'Log'); 
clabel(C,h1);

10、10^5、10^10 などのラベルが付いた下部の画像を取得します。

要約すると、次のいずれかを行う必要があります。

  1. 対数スケールをプログラムで設定する方法を見つけて、matlab に等値線を心配させてください。

  2. アイソラインを移動せずに手動でラベルを変更できるようにします (new_label = 10^old_label)。

4

1 に答える 1