【问题标题】:matlab color map nan in either matrix - 3 designated colors任一矩阵中的matlab颜色图nan - 3种指定颜色
【发布时间】:2013-08-12 21:00:20
【问题描述】:

我有两个大小相同的矩阵 A 和 B。每个都可以在某些地方包含 NaN。 我通过以下方式可视化了一些度量 C 来衡量 A 和 B 之间的差异:

C = (A - B) ./ ((A + B) ./ 2) ;

figure(1); clf;

imagesc(C); colorbar;

我想更改当前的演示文稿,以便:

  1. 如果 isnan(A(i,j)) 和 ~isnan(B(i,j)) ---> 颜色图中的白色
  2. 如果 ~isnan(A(i,j)) 和 isnan(B(i,j)) ---> 颜色图中为黑色
  3. 如果 isnan(A(i,j)) 和 isnan(B(i,j)) ---> 颜色图中的灰色
  4. 否则 ---> 根据 C(i,j) 值的颜色 [现在]

上面的颜色并不重要,只要它是可区分的。

我看到有类似的想法(例如here),但不完全是我需要的...... 有什么想法吗?

非常感谢!!!

【问题讨论】:

  • 您指出的解决方案可以让您区分 nan 值,可以将其扩展为完全符合您的要求。如果你在扩展它时遇到问题,我可以给你一个示例代码。

标签: matlab color-mapping


【解决方案1】:

也许有更好的解决方案,但我可以在这里提出一个。本质上,我正在创建图像的 RGB 表示来显示它。所以我选择了一个包含我最初想要的颜色数量的颜色图。然后,从数据中,将它们转换为索引并使用in2rgb() 来获取 RGB 图像。然后,我可以得到每种颜色的 bin 大小并适当地标记颜色条。

% Randomly generate some data for demonstration
A = [1 nan nan; 1 2 3; 4 5 6];
B = [nan 0 nan; 4 3 2; 1 2 1];
C = (A - B) ./ ((A + B) ./ 2);

% Number of colors you want to use
ncolor = 8;
data_colormap = [jet(ncolor); 1 1 1; 0 0 0; 0.5 0.5 0.5];
data_range = [min(C(:)) max(C(:))];
data_ind = (C - data_range(1)) / (data_range(2) - data_range(1)) * (ncolor - 1) + 1;

% Assign indices > ncolor for the special cases
data_ind(isnan(A)) = ncolor + 1;            % isnan(A) assign to white
data_ind(isnan(B)) = ncolor + 2;            % isnan(A) assign to black
data_ind(isnan(A) & isnan(B)) = ncolor + 3; % isnan(A) + isnan(B)

% Get the RGB representation
img = ind2rgb(round(data_ind), data_colormap);
imagesc(img)

% Custom labels for the colorbar
bin_size = (data_range(2)-data_range(1)) / ncolor;
caxis([data_range(1) data_range(2) + 3*bin_size])
colormap(data_colormap)
ax = colorbar;
yticks = get(ax, 'YTick');
yticks = yticks(yticks < data_range(2));
yticklabels = num2cell(yticks);

% Pad another 3 custom labels
yticks = [yticks, data_range(2)+[bin_size 2*bin_size 3*bin_size]-0.5*bin_size];
yticklabels = [yticklabels 'isnan(A)', 'isnan(B)', 'both'];

set(ax, 'YTick', yticks, 'YTickLabel', yticklabels)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2013-08-01
    • 2012-06-18
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多