Como visualizo uma matriz com colors e valores exibidos?

Eu quero criar imagens como esta de uma matriz de dupla precisão usando o MATLAB.

Imagem de exemplo: texto alternativo

http://twitpic.com/2xs943

Você pode criar esse tipo de plotagem facilmente usando as funções imagesc e text e ajustando vários parâmetros para os objects charts. Aqui está um exemplo:

 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]); 

E aqui está a figura que isso gera:

texto alternativo

Se você tiver problemas com os labels de escala do eixo x, você escolherá ficar muito grande e se sobrepor um ao outro. Veja como você pode lidar com isso:

  • Versões mais recentes do MATLAB: Não tenho certeza de qual versão foi adicionada, mas em objects de eixos de versões mais novas agora temos as propriedades '{X|Y|Z}TickLabelRotation' , que permitem girar os labels e ajustá-los melhor.

  • Versões mais antigas do MATLAB: Para versões mais antigas, você pode encontrar alguns envios no MathWorks File Exchange que podem girar o texto do label de seleção , como XTICKLABEL_ROTATE de Brian Katz .

 h = imagesc(magic(8)) impixelregion(h) 

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

Requer checkbox de ferramentas de processamento de imagens texto alternativo

Se você se preocupa apenas em ver as inputs de zero / diferente de zero em sua matriz (por exemplo, se é esparso), use spy .

imagesc , use imagesc .

PS: não consigo acessar sua imagem

Espero que você consiga persuadir o Matlab a desenhar isso, se você olhar para o File Exchange, pode achar que alguém já escreveu o código. Mas seria muito mais fácil, se você não tiver o código, usar o MS Excel.

EDIT: Então eu pensei isso mais e aqui é o que eu vim com. Eu não dominei a postagem de charts no SO, então, acredite, isso o levará a uma solução. Mas honestamente seria mais fácil com o Excel.

Primeiro defina uma matriz com seus valores de dados; Eu chamo a matriz G no seguinte. Então execute os comandos:

 image(G); colormap(gray) 

Agora, eu tinha que mexer um pouco, reescalonar os dados, para obter um bom gráfico, mas isso deveria produzir um gráfico em escala de cinza com eixos numéricos. Agora, vá para sua janela de figuras e abra as ferramentas de plotagem.

Selecione o eixo X e aperte o botão Ticks . Tudo que você precisa fazer agora é editar os labels para os textos que você deseja. Faça o mesmo para o eixo Y. Escreva os números nos quadrados da plotagem – use a Caixa de Texto no menu Anotações.

Depois de muito tempo brincando, você terá o gráfico que deseja. Neste ponto, sugiro que você escolha o comando de menu Arquivo | Gere M-File e faça exatamente isso. Se você quiser criar tais charts programaticamente no futuro, basta transformar o arquivo M gerado em uma function apropriada que faz o que você deseja.

Mas ainda é muito mais fácil no Excel.