Раскраска матрицы в matlab [дубликат]

Возможные Дубликаты:
как визуализировать матрицу с отображаемыми цветами и значениями?

у меня в основном NxN (edit:N может быть до 80) матрица double в MATLAB и I, когда строить ее как массив (я хочу видеть числа), а некоторые из ячеек должны быть окрашены (функция, чтобы решить, как я окрашиваю свои числа, не зависит от чисел).

Я думал о различных способах сделать это :

  • создайте сетку как изображение и наложите ее на текст, но сюжет MATLAB будет ужасным, поскольку он удалит некоторые пиксели для изменения размера изображения (моя матрица может быть вокруг 80x80).

  • экспорт в excel ? Не знаю, как бы я покрасил клетки.

помочь ?

как изображение иногда более полезно:

enter image description here

4 ответов


рассмотрим следующий код:

%# 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');

screenshot

по мере увеличения размера матрицы текст в конечном итоге будет перекрываться...


редактировать

вот способ, который работает с большими матрицами: мы используем невидимую фигуру, изменяем ее размер на что-то достаточно большое и используем небольшой размер шрифта (я использовал 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

вы можете увидеть the выходной файл здесь (изображение 10025x5962, 645KB)


Если вы хотите выводить в html (обычно используя возможность публикации matlab), вы можете изменить одну из многих функций таблицы html в файловом обмене в соответствии с вашими потребностями. Вот пример. Это позволит вам выводить текст, а также цветов.


http://www.mathworks.com/products/matlab/demos.html?file=/products/demos/shipping/matlab/imagedemo.html ?

тогда вы можете попробовать написать текст на нем


в Excel, вы всегда можете использовать условное форматирование, никаких проблем.

Что касается matlab, я никогда не делал чего-то подобного (хотя идея приходила мне в голову). Вы имели в виду что-то вроде этого как визуализировать матрицу с отображаемыми цветами и значениями?