如何创建基于矩阵填充颜色的图片?

时间:2020-02-17 09:27:34

标签: matlab

我在MATLAB中具有以下格式的单元格数组:

aa = {[1 2],[2 3],[1 2 3 4 5 6],[5],[1]}

是否可以创建这种样式的图表(即,每次显示数字时都用块颜色填充)?

enter image description here

2 个答案:

答案 0 :(得分:6)

这是一个基于pcolor的解决方案:

aa = {[1 2],[2 3],[1 2 3 4 5 6],[5],[1]};
n_rows = length(aa);
n_columns = max(cell2mat(aa));
m = zeros(n_rows + 1, n_columns + 1);
row = n_rows;
for i=1:n_rows
    m(row, aa{i}) = 1;
    row = row - 1;
end
colormap([1 1 1; 1 0.5 0]);
pcolor(m);

它产生以下结果:

enter image description here

答案 1 :(得分:4)

由于在单元阵列中具有不同长度的向量,因此需要在某些循环中进行迭代(或类似的操作,请参见下面使用的cellfun)。其余的工作是使用所需的背景值初始化某个矩阵,并将该矩阵内的所有“像素”设置为所需的前景值。

这是一个小代码段(已通过Octave 5.1.0和MATLAB Online测试):

aa = {[1 2], [2 3], [1 2 3 4 5 6], [5], [1]}

% Determine needed number of rows and columns
r = size(aa, 2);
c = max(cellfun(@max, aa));

% Initialize and fill matrix
A = 255 * ones(r, c);
for I = 1:r
  A(I, aa{I}) = 128;
end

% Show matrix with some colormap and labels
figure('Position', [300, 300, 800, 400]);
imagesc(A, [0, 255]);
colormap('hot');
set(gca, ...
  'FontSize', 12, ...
  'TickLength', [0 0], ...
  'XTick', [1:c], ...
  'XTickLabel', [repmat('V', c, 1) num2str([1:c].')], ...
  'YTick', [], ...
  'XAxisLocation', 'Top');

结果如下:

Output

(代替设置适当的颜色,我只是在这里使用了带有灰度图的灰度图像。)

希望有帮助!