コンターレベル数とレベル範囲を任意に指定する方法

36 views (last 30 days)
Takumi
Takumi on 12 Feb 2021
Commented: Takumi on 15 Feb 2021
コンター図においてレベルの範囲とその範囲におけるレベル数(分割数)を指定したいと思っています.
例えば,以下は表示レベル範囲を1e-1*[-1 1],その間におけるコンターレベル分割数を50にしようとしています.
x = linspace(-2*pi,2*pi);
y = linspace(0,4*pi);
[X,Y] = meshgrid(x,y);
Z = sin(X)+cos(Y);
contourf(X,Y,Z,1e-1*linspace(-1,1,50),'LineStyle','none')
colorbar
しかし,上記を実行するとマイナス側がホワイトアウトしてしまうようです.
ホワイトアウトを防ぎつつコンターレベルとレベル数を任意に指定する方法はありますか?
よろしくお願いいたします.
※追記
Zデータは後で変更されることを想定していて,つまり下限の値以下は常に青にしたいです
レベルを指定しない場合,下限を超えてもホワイトアウトしないのは興味深いです.
x = linspace(-2*pi,2*pi);
y = linspace(0,4*pi);
[X,Y] = meshgrid(x,y);
Z = sin(X)+cos(Y);
% [~,c]=contourf(X,Y,Z,10,'LineStyle','none'); % ホワイトアウトする
[~,c]=contourf(X,Y,Z,'LineStyle','none');
colorbar
pause()
c.ZData = Z*5;

Accepted Answer

Naoya
Naoya on 15 Feb 2021
を確認しますと、"プロットに表示される最低レベルよりも小さい値が Z に含まれる場合、最低レベルと Z の最小値との間の領域は白になります。" と記述があります。
そのため、白を回避する一案としては、以下
>> contourf(X,Y,Z,[-2,1e-1*linspace(-1,1,50)] ,'LineStyle','none')
>> caxis([-0.1 0.1])
のように、もう一段小さい最小レベルを追加します。
caxis で、カラーマップの範囲を -0.1 ~ 0.1 に設定すれば、 元の最小レベル以下を "青" にすることができます。
  1 Comment
Takumi
Takumi on 15 Feb 2021
回答ありがとうございます.解決しました.
最終的に指定したレベル範囲でアニメーションを作成したかったのですが,以下のようにすることで実現できました.
ありがとうございました.
clear
close all
clc
maxZ = 0.5;
x = linspace(-2*pi,2*pi);
y = linspace(0,4*pi);
[X,Y] = meshgrid(x,y);
Z = sin(X)+cos(Y);
[~,c] = contourf(X,Y,Z,[-Inf,maxZ*linspace(-1,1,49)],'LineStyle','none');
caxis(maxZ*[-1 1])
colorbar
for i=1:20
i
Z = Z*1.1;
c.ZData = Z;
drawnow
pause(0.1)
end

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!