當使用imagesc可視化包含NaN值的數據時,Matlab將它們視爲最小值(灰色表示它們將它們塗成黑色,噴射藍色等)。噴氣機顏色圖不包含黑色和白色。是否可以將nan值顯示爲黑色/白色? 例如:Matlab imagesc plotting nan values
data = [0 0 0 ; .5 .5 .5 ;1 1 1;nan nan nan];
應該產生藍綠色 - 紅 - 黑條。
感謝
當使用imagesc可視化包含NaN值的數據時,Matlab將它們視爲最小值(灰色表示它們將它們塗成黑色,噴射藍色等)。噴氣機顏色圖不包含黑色和白色。是否可以將nan值顯示爲黑色/白色? 例如:Matlab imagesc plotting nan values
data = [0 0 0 ; .5 .5 .5 ;1 1 1;nan nan nan];
應該產生藍綠色 - 紅 - 黑條。
感謝
我寫了一個自定義功能透視,即具有0
function h = imagesc2 (img_data)
% a wrapper for imagesc, with some formatting going on for nans
% plotting data. Removing and scaling axes (this is for image plotting)
h = imagesc(img_data);
axis image off
% setting alpha values
if ndims(img_data) == 2
set(h, 'AlphaData', ~isnan(img_data))
elseif ndims(img_data) == 3
set(h, 'AlphaData', ~isnan(img_data(:, :, 1)))
end
if nargout < 1
clear h
end
的NaN
秒的α值來顯示NaN
值將因此被顯示的顏色爲同一圖背景顏色。如果刪除線axis image off
,則NaN
將顯示與軸背景顏色相同的顏色。該功能假定輸入圖像的大小爲n x m
(單通道)或n x m x 3
(三通道),因此可能需要根據您的使用情況進行一些修改。
與您的數據:
data = [0 0 0 ; .5 .5 .5 ;1 1 1;nan nan nan];
imagesc2(data);
axis on
set(gca, 'Color', [0, 0, 0])
我可以看到實現這一目標的兩種可能的方式:
一)修改噴氣顏色表,以便其最小值爲黑色或白色,如:
cmap = jet;
cmap = [ 0 0 0 ; cmap ]; % Add black as the first color
缺點如果使用此顏色圖顯示沒有nan
值的數據,最小值也會以黑白顯示。
b)使用來自文件交換的sc,該文件將imagesc
繪製爲RGB圖像。這更加靈活,因爲一旦擁有RGB圖像,您可以隨意操作它,包括更改所有nan
值。例如:
im = sc(myData);
im(repmat(isnan(myData), [ 1 1 3 ])) = 0; % Set all the nan values in all three
% color channels to zero (i.e. black)
function imagescnan(IM)
% function imagescnan(IM)
% -- to display NaNs in imagesc as white/black
% white
nanjet = [ 1,1,1; jet ];
nanjetLen = length(nanjet);
pctDataSlotStart = 2/nanjetLen;
pctDataSlotEnd = 1;
pctCmRange = pctDataSlotEnd - pctDataSlotStart;
dmin = nanmin(IM(:));
dmax = nanmax(IM(:));
dRange = dmax - dmin; % data range, excluding NaN
cLimRange = dRange/pctCmRange;
cmin = dmin - (pctDataSlotStart * cLimRange);
cmax = dmax;
imagesc(IM);
set(gcf,'colormap',nanjet);
caxis([cmin cmax]);
第一個解決方案是沒有好處,因爲我們又回到了原點:楠和最小值是相同的顏色。 第二種解決方案更改圖像,添加數據光標時,顯示的數據是RGB值而不是實際值。 – Mercury 2013-02-18 09:51:12