【问题标题】:How to plot with specific colors the values of a matrix in matlab如何在matlab中用特定颜色绘制矩阵的值
【发布时间】:2017-01-23 18:50:05
【问题描述】:

我在 matlab 中工作,我有一个矩阵,我想通过为每列/行的最低值赋予绿色并为其余部分赋予红色或不同级别的红色来可视化它关于这个值与最低值的接近或远近,最后打印其中的值。例如,假设我有以下矩阵:

0.0085 0.0244 0.0335 0.0312 0.0392 0.0392
0.0246 0.0078 0.0234 0.0281 0.0395 0.0395
0.0299 0.0295 0.0108 0.0224 0.0598 0.0598
0.0253 0.0317 0.0236 0.0123 0.0583 0.0583
0.0363 0.0337 0.0500 0.0497 0.0038 0.0583

我想要实现的是这样的:

有没有办法达到上述效果?

我正在检查 pcolor 或 imagesc 函数,但我无法相处。我发现这些链接 herehere 他们有点尝试做类似的事情,但我无法让它根据我的需要进行更改。因此,有没有人知道是否可以做类似的事情以及如何做?

谢谢。


更新:

如果我还想在顶部和侧面添加一些标题栏,请看下面:

【问题讨论】:

  • 您好像试图强制 MATLAB 成为 EXCEL...
  • 只是想节省将其从 matlab 转移到 excel 的时间。因为我只需要可视化部分,它可以在 matlab 中直接完成,为什么要花时间做这个。我认为您的回答也会对其他人有所帮助。干得好,再次感谢 ;-)。

标签: matlab matrix plot colors matlab-figure


【解决方案1】:

您可以在每一列上找到最小值,并创建一个矩阵,将颜色与最小值的对应索引相关联。

此示例为每列的最小值创建一种颜色。

[~, idx] = min(A);
M = zeros(size(A));
for iCol = 1:size(A,2)
    M(idx(iCol), iCol) = 1;
end
imagesc(M);

同样,您可以创建一个函数来为每个值分配所需的颜色。 如果你每个人都打印字符串的值,你可以使用 text 函数。

【讨论】:

  • 感谢@serigado,您的答案与 BMH 的答案相同;-)
  • 实际上 BMH 的答案是从我那里得到的,如我所说,实现颜色栏并使用文本功能添加字符串。
  • 说实话,我写我的时候没有看到你的答案。只有在我发布它之后,我才看到你提出了相同方向的建议。我决定放弃它,因为它提供了完整的解决方案,其他部分也很重要(比如如何正确使用text)。无论如何,你也得到了我的支持;)
【解决方案2】:

您可以使用insertText 创建它。

使用类似于以下示例的内容:

A = [0.0085 0.0244 0.0335 0.0312 0.0392 0.0392
     0.0246 0.0078 0.0234 0.0281 0.0395 0.0395
     0.0299 0.0295 0.0108 0.0224 0.0598 0.0598
     0.0253 0.0317 0.0236 0.0123 0.0583 0.0583
     0.0363 0.0337 0.0500 0.0497 0.0038 0.0583];

I = zeros(92, 348, 3, 'uint8');
I(:,:,1) = 255;I(:,:,2) = 199;I(:,:,3) = 206; %Background color

text_str = cell(length(A(:)), 1);
box_color = zeros(length(A(:)), 3);
text_color = zeros(length(A(:)), 3);
position = zeros(length(A(:)), 2);
for y = 0:size(A, 1)-1
    for x = 0:size(A,2)-1
        index = y*size(A,2) + x + 1;
        val = A(y+1, x+1);
        text_str{index} = [' ', num2str(val, '%0.4f'), ' '];
        position(index, 1) = x*58 + 1;
        position(index, 2) = y*18 + 1;
        if (val == min(A(:, x+1)))
            %Green
            box_color(index, :) = uint8([198, 239, 206]);
            text_color(index, :) = uint8([0, 100, 0]);
        else
            %Red
            box_color(index, :) = uint8([255, 199, 206]);
            text_color(index, :) = uint8([100, 0, 0]);
        end
    end
end

I = insertText(I, position, text_str, 'FontSize', 12, 'BoxColor', box_color, 'TextColor', text_color, 'BoxOpacity', 1);

figure;imshow(I);

注意:在较新版本的 Matlab(比我使用的更新)中,您也可以选择字体。

【讨论】:

  • 感谢您的回答。尽管使用您的解决方案,我认为您可以对 EBH 的答案应用更多自定义,但我认为 EBH 的代码行更易于理解和高效。如果我可以将您的答案标记为正确,我会这样做,但不幸的是我不能。不过,你得到了我的支持;-)。添加一些标题栏怎么样?
  • EBH 的回答绝对好,他也得到了我的支持。
【解决方案3】:

这是一个快速的选择:

A = [0.0085 0.0244 0.0335 0.0312 0.0392 0.0392
    0.0246 0.0078 0.0234 0.0281 0.0395 0.0395
    0.0299 0.0295 0.0108 0.0224 0.0598 0.0598
    0.0253 0.0317 0.0236 0.0123 0.0583 0.0583
    0.0363 0.0337 0.0500 0.0497 0.0038 0.0583];
back = [1 0 0];
headers = [0.5 0.5 0.5];
minima = [0 1 0];
map = [back ; headers; minima];
colormap(map)
[~,ind] = min(A);
B = zeros(size(A));
for k = 1:size(A,2)
    B(ind(k),k) = 1;
end
B = [ones(1,size(B,2))*0.5;B];
B = [ones(size(B,1),1)*0.5 B];
imagesc(B)
axis off
[y,x]=ndgrid((1:size(A,1)),(1:size(A,2)));
row_titles = num2str((1:size(A,1)).'); % could be any vector...
text(ones(size(A,1),1),2:size(A,1)+1,row_titles,'FontSize',16,'HorizontalAlignment','center',...
    'VerticalAlignment','middle','Color','w')
coloumn_titles = num2str((1:size(A,2)).'); % could be any vector...
text(2:size(A,2)+1,ones(size(A,2),1),coloumn_titles,'FontSize',16,'HorizontalAlignment','center',...
    'VerticalAlignment','middle','Color','w')
text(x(:)+1,y(:)+1,num2str(A(:)),'FontSize',16,'HorizontalAlignment','center',...
    'VerticalAlignment','middle')

给出:

您可以更改headersbackminima 颜色以适合您喜欢的风格。

【讨论】:

  • 感谢您的回答,Rotem 的回答似乎更有效率,因为您得到了正确的答案。但是,如果我还想添加一些标题栏,请在我的初始帖子中查看我的更新。
  • 我还发现可以使用以下替代代码跳过 for 循环: rows = 1:size(A,2); linInd=sub2ind(大小(A),ind,rows); B(linInd) = 1;并且可以添加一些透明度: him = imagesc(B); set(他,'AlphaData',0.5);
  • 正确,我只是尽量保持答案简单,并专注于基本的可视化方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 2014-03-16
  • 1970-01-01
  • 2013-01-08
相关资源
最近更新 更多