Как визуализировать матрицу с отображаемыми цветами и значениями? - PullRequest
48 голосов
/ 15 октября 2010

Я хочу создать подобные изображения из матрицы двойной точности, используя MATLAB.

Образец изображения: alt text

http://twitpic.com/2xs943

Ответы [ 4 ]

89 голосов
/ 15 октября 2010

Вы можете довольно легко создать этот вид графика, используя встроенные функции imagesc и text и настраивая ряд параметров для графических объектов.Вот пример:

mat = rand(5);           % A 5-by-5 matrix of random values from 0 to 1
imagesc(mat);            % Create a colored plot of the matrix values
colormap(flipud(gray));  % Change the colormap to gray (so higher values are
                         %   black and lower values are white)

textStrings = num2str(mat(:), '%0.2f');       % Create strings from the matrix values
textStrings = strtrim(cellstr(textStrings));  % Remove any space padding
[x, y] = meshgrid(1:5);  % Create x and y coordinates for the strings
hStrings = text(x(:), y(:), textStrings(:), ...  % Plot the strings
                'HorizontalAlignment', 'center');
midValue = mean(get(gca, 'CLim'));  % Get the middle value of the color range
textColors = repmat(mat(:) > midValue, 1, 3);  % Choose white or black for the
                                               %   text color of the strings so
                                               %   they can be easily seen over
                                               %   the background color
set(hStrings, {'Color'}, num2cell(textColors, 2));  % Change the text colors

set(gca, 'XTick', 1:5, ...                             % Change the axes tick marks
         'XTickLabel', {'A', 'B', 'C', 'D', 'E'}, ...  %   and tick labels
         'YTick', 1:5, ...
         'YTickLabel', {'A', 'B', 'C', 'D', 'E'}, ...
         'TickLength', [0 0]);

И вот рисунок, который это генерирует:

alt text

Если у вас возникли проблемы с тиковыми метками оси X, вы выбралислишком широкий и перекрывающий друг друга, вот как вы можете справиться с этим:

  • Более новые версии MATLAB: Не уверен, какая версия была добавлена, но в более новых версиях осиобъекты теперь имеют свойства '{X|Y|Z}TickLabelRotation', которые позволяют поворачивать метки и лучше их подогнать.

  • Старые версии MATLAB: Для более старых версий вы можете найти некоторые материалы на MathWorks File Exchange , которые могут вращать текст метки, например XTICKLABEL_ROTATE из Брайан Кац .

18 голосов
/ 15 октября 2010
h = imagesc(magic(8))
impixelregion(h)

http://www.mathworks.com/help/toolbox/images/ref/impixelregion.html

Требуется набор инструментов для обработки изображений alt text

1 голос
/ 15 октября 2010

Если вас интересует только просмотр нулевых / ненулевых записей в вашей матрице (например, если она редкая), используйте spy.

Остальное, используйте imagesc.

PS: я не могу получить доступ к вашему изображению

1 голос
/ 15 октября 2010

Полагаю, вы могли бы убедить Матлаба нарисовать это, если вы посмотрите на Файловый обмен, вы можете обнаружить, что кто-то уже написал код. Но было бы намного проще, если у вас нет кода, использовать MS Excel.

РЕДАКТИРОВАТЬ: Так что я подумал еще об этом, и вот что я придумал. Я не освоил публикацию графики в SO, так что поверьте мне, это приведет вас к решению. Но, честно говоря, было бы проще с Excel.

Сначала определите матрицу с вашими значениями данных; Я называю матрицу G следующим. Затем выполните команды:

image(G); 
colormap(gray)

Теперь мне пришлось немного повозиться, перемасштабировать данные, чтобы получить хорошую графику, но это должно привести к полутоновому графику с цифровыми осями. Теперь перейдите к окну фигуры и откройте инструменты для построения графика.

Выберите ось X и нажмите кнопку Ticks. Все, что вам нужно сделать сейчас, это отредактировать метки для нужных вам текстов. Сделайте то же самое для оси Y. Напишите числа в квадратах на графике - используйте текстовое поле в меню «Аннотации».

После долгих раздумий вы получите нужную графику. На данный момент, я предлагаю вам выбрать команду меню Файл | Создайте M-File и сделайте это. Если вы хотите создавать такую ​​графику программно в будущем, просто превратите сгенерированный файл M в правильную функцию, которая делает то, что вы хотите.

Но в Excel все еще намного проще.

...