web-dev-qa-db-fra.com

Comment visualiser une matrice avec des couleurs et des valeurs affichées?

Je veux créer des images comme celle-ci à partir d'une matrice double précision en utilisant MATLAB.

Exemple d'image: alt text

http://twitpic.com/2xs94

48
Piji

Vous pouvez créer ce type de tracé vous-même assez facilement en utilisant les fonctions intégrées imagesc et text et en ajustant un certain nombre de paramètres pour les objets graphiques. Voici un exemple:

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

Et voici le chiffre que cela génère:

alt text

Si vous rencontrez des problèmes avec les étiquettes de graduation de l'axe x que vous choisissez étant trop larges et se chevauchant, voici comment vous pouvez les gérer:

  • Versions plus récentes de MATLAB: Je ne sais pas quelle version cela a été ajouté, mais dans les versions plus récentes, les objets axes ont maintenant les propriétés'{X|Y|Z}TickLabelRotation', qui vous permet de faire pivoter les étiquettes et de mieux les ajuster.

  • Anciennes versions de MATLAB: Pour les anciennes versions, vous pouvez trouver des soumissions sur le MathWorks File Exchange qui peuvent faire pivoter le texte de l'étiquette à cocher , comme XTICKLABEL_ROTATE de Brian Katz .

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

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

Nécessite la boîte à outils de traitement d'image alt text

18
MatlabDoug

J'espère que vous pourriez persuader Matlab de dessiner que, si vous regardez l'échange de fichiers, vous trouverez peut-être que quelqu'un a déjà écrit le code. Mais il serait beaucoup plus facile, si vous n'avez pas le code, d'utiliser MS Excel.

EDIT: Alors j'ai réfléchi un peu plus et voici ce que j'ai trouvé. Je n'ai pas maîtrisé la publication de graphiques sur SO, alors croyez-moi, cela vous mènera vers une solution. Mais ce serait honnêtement plus facile avec Excel.

Définissez d'abord une matrice avec vos valeurs de données; J'appelle la matrice G dans ce qui suit. Exécutez ensuite les commandes:

image(G); 
colormap(gray)

Maintenant, je devais faire quelques bidouilles, redimensionner les données, pour obtenir un bon graphique, mais cela devrait produire un tracé en niveaux de gris avec des axes numériques. Maintenant, allez dans votre fenêtre de figure et ouvrez les outils de tracé.

Sélectionnez l'axe X et appuyez sur le bouton Ticks. Il ne vous reste plus qu'à éditer les étiquettes avec les textes que vous souhaitez. Faites de même pour l'axe Y. Écrivez les nombres dans les carrés du tracé - utilisez la zone de texte du menu Annotations.

Après beaucoup de discussions, vous aurez le graphisme que vous souhaitez. À ce stade, je vous suggère de choisir la commande de menu Fichier | Générez M-File et faites exactement cela. Si vous souhaitez créer de tels graphiques par programme à l'avenir, il suffit de transformer le fichier M généré en une fonction appropriée qui fait ce que vous voulez.

Mais c'est toujours beaucoup plus facile dans Excel.

1

Si vous ne vous souciez que de regarder les entrées nulles/non nulles dans votre matrice (par exemple, si elles sont rares), utilisez spy .

Sinon, utilisez imagesc .

PS: je ne peux pas accéder à votre image

1
Jacob