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

조회 수: 37 (최근 30일)
Takumi
Takumi 2021년 2월 12일
댓글: Takumi 2021년 2월 15일
コンター図においてレベルの範囲とその範囲におけるレベル数(分割数)を指定したいと思っています.
例えば,以下は表示レベル範囲を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;

채택된 답변

Naoya
Naoya 2021년 2월 15일
を確認しますと、"プロットに表示される最低レベルよりも小さい値が 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
Takumi
Takumi 2021년 2월 15일
回答ありがとうございます.解決しました.
最終的に指定したレベル範囲でアニメーションを作成したかったのですが,以下のようにすることで実現できました.
ありがとうございました.
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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 等高線図에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!