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

47

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

Пример изображения: Изображение 537

http://twitpic.com/2xs943

Теги:
matrix
data-visualization

4 ответа

91
Лучший ответ

Вы можете создать этот вид сюжета довольно легко, используя встроенные функции 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]);

И вот эта цифра генерирует:

Изображение 6314

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

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

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

  • 1
    +1: гораздо лучшая экспозиция, чем я представил.
  • 4
    для более общего решения следует сравнить со mean(get(gca,'CLim')) вместо 0.5 чтобы определить цвет текста на фоне цветовой карты в градациях серого.
Показать ещё 7 комментариев
17
h = imagesc(magic(8))
impixelregion(h)

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

Требуется панель обработки изображений Изображение 6315

  • 2
    +1: это чудесно безумный подход. Я надеюсь, что OP попробует это ...
1

Я ожидаю, что вы сможете убедить Matlab привлечь это, если вы посмотрите на File Exchange, вы можете обнаружить, что кто-то уже написал код. Но было бы намного проще, если бы у вас не было кода, чтобы использовать MS Excel.

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

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

image(G); 
colormap(gray)

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

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

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

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

1

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

В противном случае используйте imagesc.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню