我正在使用imagesc
来显示来自矩阵的数据。矩阵包含NaNs
和Inf
值。我能够将NaNs
重新着色为背景色。我正在使用喷射彩色地图,我想将Inf
值重新着色为黑色或其他不是背景颜色或喷射颜色方案的颜色。默认情况下,Matlab将Inf
值与最大值相同。以下是一个简短的示例代码,以便了解我的意思。
a = [1 2 NaN; 4 Inf 6; 7 5 3];
%// Matrix of data
test_image= imagesc(a);
%// Creates imagesc figure.
colormap('jet');
%// Uses jet color scheme.
set(test_image,'alphadata',~isnan(a))
%// Ignores NaN values and sets NaN values to background colour.
colorbar
%// Adds a colorbar
所以在这个例子中我想要的是中间单元格(2,2)是黑色的。与左下角(3,1)中最大值7的颜色不同。
答案 0 :(得分:1)
最简单的方法是定义自己的色彩映射:
cm = [jet(255) ; 0 0 0];
colormap(cm);
imagesc(a);
caxis([min(a(:)) max(a(:))+1]);
最佳,
答案 1 :(得分:0)
我在Matlab中心运行的特定Matlab论坛上发布了这个问题。人们总是不回答那个论坛。我得到的答案并不是很有效,但让我走上正轨。我想出了以下内容:
a = [1 2 NaN; 4 Inf 6; 7 5 3];
% sample data
infRGB = reshape([0 0 0],1,1,3);
%set to RGB triple for desired color for inf values in this case black
%denoted by [0 0 0].
infimgdata = repmat(infRGB, size(a,1), size(a,2));
%same size as "a" but all the one color
infimg = image(infimgdata, 'alphadata', ~isnan(a));
%plots an image based on 'infimgdata' excludes NaN's therefore making NaN
%values white
hold on
%plot to same figure
test_image = imagesc(a,'alphadata', ~(isnan(a)|isinf(a)));
%plot data
colormap(jet());
colorbar
hold off
% stop plotting to the same figure