【问题标题】:Plot a matrix, values as colors绘制一个矩阵,值作为颜色
【发布时间】:2014-11-02 22:17:22
【问题描述】:

我有任意维度的随机矩阵,我想为每个值(随机或不随机)分配一种颜色,并用数字绘制矩阵,

到目前为止,我已经做到了,

m = 12;
n = 8;
A = randi(5,[m n]);
Arot = flipud(A);
pcolor(Arot);figure(gcf);
for i = 1 : n -1
    for j = 1 : m -1
        text(i + .5 , j + .5 ,num2str(Arot(j,i)),'FontSize',18);
    end
end

这给了我这个,

 A =

 4     4     4     1     2     1     4     2
 5     2     2     3     2     1     1     2
 1     2     1     4     1     2     5     5
 1     3     5     3     1     4     1     3
 3     4     4     4     3     3     3     4
 2     5     2     2     1     1     2     4
 1     3     1     3     5     5     2     4
 5     1     2     4     1     4     1     2
 2     4     5     5     1     3     5     2
 4     2     2     3     4     3     3     4
 3     5     3     2     4     3     3     1
 1     4     5     3     2     4     3     5

但如您所见,我丢失了A 的第一行和最后一列。

实际上问题始于使用pcolor,它为mxn 输入提供(m-1)x(n-1) 图。

有什么建议吗?

谢谢,

【问题讨论】:

  • @AnonSubmitter85,是的,但是如果我不使用它们,丢失的行和列将被写在情节之外。
  • 是的,我在运行代码时注意到了这一点。如果您查看帮助部分,您会看到“在默认着色模式下,'faceted',每个单元格都有一个恒定的颜色,并且不使用 C 的最后一行和最后一列。”
  • @AnonSubmitter85,这很有趣!

标签: matlab matrix plot


【解决方案1】:

使用imagesc 代替pcolor 可以解决问题。它还带来了一些其他好处:

  • 无需flipud
  • text 对象的坐标变为整数值;
  • 轴会自动设置为“矩阵”模式,原点位于右上角。

代码:

m = 8;
n = 6;
A = randi(5,[m n]);
imagesc(A);
for ii = 1:n
    for jj = 1:m
        text(ii, jj, num2str(A(jj,ii)), 'FontSize', 18);
    end
end

对于

A =
     4     5     4     2     4     4
     5     4     3     4     4     2
     5     4     1     1     1     3
     4     3     5     2     5     4
     1     2     2     2     5     3
     1     5     2     5     1     3
     4     3     1     3     3     1
     3     1     2     4     2     3

这会产生

【讨论】:

    【解决方案2】:

    我刚刚在pcolor 之前填充了矩阵,我认为这是您想要的效果。它起作用的原因来自pcolor 的帮助文档,其中指出

    在默认着色模式“分面”下,每个单元格都有一个恒定的颜色 而C的最后一行和最后一列没有使用。

    m = 12;
    n = 8;
    A = randi(5,[m n]);
    Arot = flipud(A);
    Arot = [ Arot; Arot(end,:) ];
    Arot = [ Arot, Arot(:,end) ];
    pcolor(Arot);figure(gcf);
    for i = 1 : n
      for j = 1 : m
        text(i + .5 , j + .5 ,num2str(Arot(j,i)),'FontSize',18);
      end
    end
    

    【讨论】:

    • +1 我从来不明白为什么使用pcolorimagesc 对我来说看起来更自然:-)
    • @LuisMendo pcolor 可以做的一件事是正确显示不在直线网格上的图像(您也必须使用shading interp)。它很慢而且很占用内存,但它可以在某些情况下工作。
    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 2017-01-23
    相关资源
    最近更新 更多