2014-11-02 2 views
1

У меня есть случайная матрица с произвольными размерами, и я хочу, чтобы назначить цвет для каждого значения (в случайном порядке или нет) и построить матрицу с номерами, как,Plot матрицы, значение как цвет

enter image description here

Так пока я это сделал,

m = 12; 
n = 8; 
A = randi(5,[m n]); 
Arot = flipud(A); 
pcolor(Arot);figure(gcf); 
for i = 1 : n -1 
    for j = 1 : m -1 
     text(i + .5 , j + .5 ,num2str(Arot(j,i)),'FontSize',18); 
    end 
end 

, который дает мне это,

enter image description here

для

A = 

4  4  4  1  2  1  4  2 
5  2  2  3  2  1  1  2 
1  2  1  4  1  2  5  5 
1  3  5  3  1  4  1  3 
3  4  4  4  3  3  3  4 
2  5  2  2  1  1  2  4 
1  3  1  3  5  5  2  4 
5  1  2  4  1  4  1  2 
2  4  5  5  1  3  5  2 
4  2  2  3  4  3  3  4 
3  5  3  2  4  3  3  1 
1  4  5  3  2  4  3  5 

, но как вы можете видеть, что я потерял первую строку и последний столбец A.

На самом деле проблема начинается с использования pcolor, что дает участок (m-1)x(n-1) для ввода mxn.

Любые предложения?

Спасибо,

+0

@ AnonSubmitter85, да, но если я не использую их утраченную строку и колонка будет выписана сторона сюжета. – Rashid

+0

Да, я заметил, что когда я запускал код. Если вы посмотрите раздел справки, вы увидите, что «В режиме затенения по умолчанию« граненый »каждая ячейка имеет постоянный цвет, а последняя строка и столбец C не используются». – AnonSubmitter85

+0

@ AnonSubmitter85, Это было интересно! – Rashid

ответ

2

Я просто проложенный матрицу до pcolor, и я думаю, что это эффект, который вы хотели. Причина, по которой работает приходит от помощи дока для pcolor, в котором говорится, что

В режиме по умолчанию затенения, «граненый», каждая клетка имеет постоянный цвет и последняя строка и столбец C не используются.

m = 12; 
n = 8; 
A = randi(5,[m n]); 
Arot = flipud(A); 
Arot = [ Arot; Arot(end,:) ]; 
Arot = [ Arot, Arot(:,end) ]; 
pcolor(Arot);figure(gcf); 
for i = 1 : n 
    for j = 1 : m 
    text(i + .5 , j + .5 ,num2str(Arot(j,i)),'FontSize',18); 
    end 
end 
+0

+1 Я никогда не понимаю, почему 'pcolor' используется вообще.'imagesc' выглядит намного более естественным для меня :-) –

+0

@ LuisMendo Одна из вещей, которую может выполнить' pcolor', - это правильно отображать изображения, которые не находятся на прямолинейной сетке (вы также должны использовать 'shading interp'). Это медленный процесс, но он может работать для некоторых сценариев. – AnonSubmitter85

3

Используя imagesc вместо pcolor решает эту проблему. Это также приносит некоторые другие преимущества:

  • Избегает использования flipud;
  • Координаты объектов text становятся целыми;
  • Оси автоматически устанавливаются в «матричный» режим, причем начало координат находится в правом верхнем углу.

Код:

m = 8; 
n = 6; 
A = randi(5,[m n]); 
imagesc(A); 
for ii = 1:n 
    for jj = 1:m 
     text(ii, jj, num2str(A(jj,ii)), 'FontSize', 18); 
    end 
end 

Для

A = 
    4  5  4  2  4  4 
    5  4  3  4  4  2 
    5  4  1  1  1  3 
    4  3  5  2  5  4 
    1  2  2  2  5  3 
    1  5  2  5  1  3 
    4  3  1  3  3  1 
    3  1  2  4  2  3 

это производит

enter image description here

+0

Спасибо, умный и опрятный. – Rashid

Смежные вопросы