Значения NaN получают первый цвет из цветовой карты осей, который по умолчанию соответствует минимальному значению (кроме NaN).Вы можете изменить цвет для ограничения цвета осей минимального значения с помощью функции CAXIS .Чтобы назначить контрастный цвет для значений NaN, вы можете добавить специальный цвет для значений NaN в качестве первого цвета (вектор 1x3).
Я воспользовался вашим примером и создал функцию (с некоторыми комментариями):
function [h hcb] = imagescwithnan(a,cm,nanclr)
% IMAGESC with NaNs assigning a specific color to NaNs
%# find minimum and maximum
amin=min(a(:));
amax=max(a(:));
%# size of colormap
n = size(cm,1);
%# color step
dmap=(amax-amin)/n;
%# standard imagesc
him = imagesc(a);
%# add nan color to colormap
colormap([nanclr; cm]);
%# changing color limits
caxis([amin-dmap amax]);
%# place a colorbar
hcb = colorbar;
%# change Y limit for colorbar to avoid showing NaN color
ylim(hcb,[amin amax])
if nargout > 0
h = him;
end
Здесь оператор caxis назначает первый цвет карты цветов не минимальному значению amin
, а amin-dmap
.Таким образом, первый цвет назначается специально для NaN.
Попробуйте эту функцию с:
a=peaks;
a(a < 0.5) = nan;
imagescwithnan(a,hot,[0 1 1]) %# [0 1 1] is cyan
![test image - NaN color is hidden](https://i.stack.imgur.com/9VsPu.png)
Если вы прокомментируете оператор ylim вфункция (можно управлять с помощью дополнительного параметра) этот цвет NaN будет на карте цветов.
![test image - NaN color is shown on the colorbar](https://i.stack.imgur.com/jJ3o6.png)