imagesc показывает значения NaN как не NaN

Красное пятно на следующем изображении показывает область численной модели. Зеленое пятно показывает Землю.

область численной модели

Я хочу создать матрицу со значениями высоты над поверхностью Земли для точек в области модели.

Я использую следующий код:

close all
clear all

%%%slope coefficient
a=1/50;

%%%resolution
dx = 500;
dz = 2.5;

%%%define domain
xi = 0:dx:200e3;
zi = 0:dz:6e2;
m=length(zi);%domain dimension
n=length(xi);%domain dimension

%%%max z where the slope starts
zs = find(zi==max(zi)); 


for ii=1:n %for every x

    zslope = -a*xi(ii)+zi(zs);%equation of the slope

    zz(ii)=zslope;
   if zslope>=0 %if the slope is still in the domain (z>0)
     for jj=1:m %for every z

       if zi(jj)>=zslope %above the slope

         Z(jj,ii) = zi(jj)-zslope; %height above the slope

       elseif zi(jj)<zslope %below the slope (ground)

         Z(jj,ii)=NaN; 

       end
     end%for on z

   elseif zslope<0 %the slope is no longer in the domain

       for jj=1:m %for every z

          Z(jj,ii) = zi(jj)-zslope; %height above the slope

       end
   end
end%for on x 

Это, кажется, работает нормально:

figure;
imagesc(Z)
colorbar

Значения Z

на самом деле значение в точке 240 равно 600, как и следовало ожидать.

ЭТА ПРОБЛЕМА

Проблема в том, что в рабочей области Z матрица полна NaN s!

Как может imagesc не показывать NaN значения, когда они NaN s?

нота

если я прокомментирую строки

elseif zi(jj)<zslope %below the slope (ground)

     Z(jj,ii)=NaN;

нет проблем.

1 ответ

Решение

NaN отображаются как самое низкое значение в цветовой панели (в противоположность). Если вы хотите удалить значения NaN из графика, вы можете сделать это, используя isnan и AlphaData имущество.

imagesc(Z,'AlphaData',~isnan(Z))
Другие вопросы по тегам