可能是重复问题:
如何用颜色和数值显示矩阵?
我有一个 NxN
(编辑:N可以高达80)的 MATLAB 双精度矩阵,我想将其绘制为数组(我想看到数字),并且其中一些单元格应该着色(决定如何着色与数字无关)。
我考虑了不同的方法:
创建一个图像网格,并在其上叠加文本,但 MATLAB 的绘图效果会很差,因为它会删除一些像素来调整图像大小(我的矩阵可以大约为
80x80
)。导出到 Excel?不知道如何着色单元格。
有什么帮助吗?
有时候图片更有帮助:
可能是重复问题:
如何用颜色和数值显示矩阵?
我有一个 NxN
(编辑:N可以高达80)的 MATLAB 双精度矩阵,我想将其绘制为数组(我想看到数字),并且其中一些单元格应该着色(决定如何着色与数字无关)。
我考虑了不同的方法:
创建一个图像网格,并在其上叠加文本,但 MATLAB 的绘图效果会很差,因为它会删除一些像素来调整图像大小(我的矩阵可以大约为 80x80
)。
导出到 Excel?不知道如何着色单元格。
有什么帮助吗?
有时候图片更有帮助:
考虑以下代码:
%# matrix
M = rand(11,11);
[r c] = size(M);
%# text location and labels
[xloc yloc] = meshgrid(1:c,1:r);
xloc = xloc(:); yloc = yloc(:);
str = strtrim(cellstr( num2str(M(:),'%.3g') ));
xticklabels = cellstr( num2str((1:c)','M%d') );
yticklabels = cellstr( num2str((1:r)','M%d') );
%# plot colored cells
mask = M>0.9; %# or any other mask
h = imagesc(1:c, 1:r, ones(size(M)));
set(h, 'AlphaData',mask)
colormap(summer) %# colormap([0 1 0])
set(gca, 'Box','on', 'XAxisLocation','top', 'YDir','reverse', ...
'XLim',[0 c]+0.5, 'YLim',[0 r]+0.5, 'TickLength',[0 0], ...
'XTick',1:c, 'YTick',1:r, ...
'XTickLabel',xticklabels, 'YTickLabel',yticklabels, ...
'LineWidth',2, 'Color','none', ...
'FontWeight','bold', 'FontSize',8, 'DataAspectRatio',[1 1 1]);
%# plot grid
xv1 = repmat((2:c)-0.5, [2 1]); xv1(end+1,:) = NaN;
xv2 = repmat([0.5;c+0.5;NaN], [1 r-1]);
yv1 = repmat([0.5;r+0.5;NaN], [1 c-1]);
yv2 = repmat((2:r)-0.5, [2 1]); yv2(end+1,:) = NaN;
line([xv1(:);xv2(:)], [yv1(:);yv2(:)], 'Color','k', 'HandleVisibility','off')
%# plot text
text(xloc, yloc, str, 'FontSize',8, 'HorizontalAlignment','center');
当矩阵变大时,文本最终会重叠...
这里有一种适用于更大矩阵的方法:我们使用一个不可见的图形,将其调整为足够大的尺寸,并使用较小的字体大小(我使用了2
):
M = rand(80,80);
figure('visible','off')
set(gcf, 'Units','Pixels', 'Position', [0, 0, 10000, 10000], ...
'PaperPositionMode','Auto');
set(gca, 'units','normalized', 'position',[0.05 0.02 0.9 0.95])
%# ...
最后,以高分辨率导出文件:
%# ...
print -dpng -r600 file.png
N=80
试过了)。 - Amro如果你想要输出到HTML(通常使用Matlab的发布功能),你可以修改文件交换中的许多HTML表格函数来满足你的需求。这里有一个例子。这将使你能够输出文本以及颜色。