塗りつぶした2次元等​高線図(contou​rf)のカラーコンタ​ー

様々なケースで同一のカラーコンターを使うために(同一の値に対して同一の色で表示される),以下のように指定したのですが,
contourf(X,Y,Z,[0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0],'ShowText','on');
ケース毎に存在する数値の範囲が異なるため,同一の値に対して同一の色で表示されません。
存在する数値の範囲が異なった場合でも,同一の値に対して同一の色で表示させるための方法はありませんか?

4 comentarios

Kenta
Kenta el 5 de Dic. de 2019
こんにちは、コード例でlevelと示しているところに、等高線の値を指定すれば、
等高線の高さが固定されます。下の例だと、中央部のある四角形の領域の値を変化させ、
それぞれで等高線画像を示しています。
値の範囲は変わっているものの、他の場所は同じ色で示されていて、変化した部分を見て取ることができます。
しかし、これでは問題があるようで、カラーバーのもっとも下の値(ここでは-6.5)よりも低い値があるときは白飛びしますが、逆に
カラーバーの上限値(ここでは6.5)に相当する値がなければ、等高線のレベルが自動的に補正されてしまいます。例えば下のように打つと、下限の値は白飛びしていますが、上限の値がlevelどおりに表現されません。
添付いただいたファイルを拝見する限り、上限はいつも1なので、そちらの例では大丈夫ですが、case2, case3の上限(最大値)がcase1のものよりも下がった場合、うまくいきません。
少し懸念点のある方法ですが、参考になれば幸いです。
Z2=peaks-5;
contourf(Z2,level)
colorbar
example.PNG
Z = peaks;
minimum=min(Z,[],'all');
maximum=max(Z,[],'all');
num_level=10;
interval=(maximum-minimum)/(num_level-1);
level=minimum+(0:num_level-2)*interval;
subplot(1,3,1)
contourf(Z,level)
colorbar
Z2 = Z;
Z2(20:30,15:35)=Z2(20:30,15:35)-3;
subplot(1,3,2)
contourf(Z2,level)
colorbar
Z3 = Z;
Z3(20:30,15:35)=Z3(20:30,15:35)-7;
subplot(1,3,3)
contourf(Z3,level)
colorbar
Etsuo Maeda
Etsuo Maeda el 9 de Dic. de 2019
下限の"白飛び"は実は色抜けなので
cmap = colormap;
ax = gca;
ax.Color = cmap(1, :);
のようにAxesに色を付けるとそれっぽくなります
HTH
Kenta
Kenta el 9 de Dic. de 2019
教えていただき、誠にありがとうございます。教えていただいたコードを実行すると
以下のようになり、「白飛び」がなくなりました。axesに色をつけるとよかったのですね。
勉強になりました。ありがとうございました。
example2.PNG
Etsuo Maeda
Etsuo Maeda el 10 de Dic. de 2019
Itakuraさん。反映ありがとうございます。少しだけ訂正です。
cmap = colormap;
ax = gca;
ax.Color = cmap(1, :);
だと、Contour最下段の色と背景色が同じになって違和感があるかもしれません。
少しだけリファインしてみました。
ついでに上限の方もcaxis関数で弄れるようにしておきました。
Katayamaさん。こういうのでどうでしょうか。
untitled.png
Z = peaks;
myMin = -2;
myMax = 12;
levels = myMin:myMax;
subplot(2, 1, 1)
contourf(Z, levels);
colorbar
subplot(2, 1, 2)
contourf(Z, levels);
colorbar
caxis([myMin myMax])
cmap = colormap;
colormap(cmap(2:end, :))
ax = gca;
ax.Color = cmap(1, :);
HTH

Iniciar sesión para comentar.

 Respuesta aceptada

Kenta
Kenta el 23 de En. de 2020

1 voto

ご返信ありがとうございます。お役に立ててよかったです。コメントのほうもEtsuo Maedaさまよりアドバイスを頂き、いろいろと変更があったのでこちらに改訂版を掲載させていただきます。宜しくお願い致します。maeda様、アドバイスをくださり、ありがとうございました。
result.PNG
clear;clc;close all
cmap = colormap;
Z = peaks;
minimum=min(Z,[],'all');
maximum=max(Z,[],'all');
num_level=10;
interval=(maximum-minimum)/(num_level-1);
level=minimum+(0:num_level-2)*interval;
d=[-5 3 7];
for i=1:3
Z2=Z;
Z2(20:30,15:35)=Z2(20:30,15:35)-d(i);
subplot(1,3,i)
contourf(Z2,level)
colorbar
caxis([minimum maximum])
colormap(cmap(2:end, :))
ax = gca;
ax.Color = cmap(1, :);
end

Más respuestas (1)

Yoshifumi Katayama
Yoshifumi Katayama el 23 de En. de 2020

1 voto

皆様
ありがとうございました。
お陰様で,希望通りの図を作成することができました。
お礼が遅くなり申し訳ございませんでした。

Productos

Etiquetas

Preguntada:

el 5 de Dic. de 2019

Respondida:

el 23 de En. de 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!