Je souhaite créer des images de ce type à partir d'une matrice double précision en utilisant MATLAB.
Exemple d'image :
Je souhaite créer des images de ce type à partir d'une matrice double précision en utilisant MATLAB.
Exemple d'image :
Vous pouvez créer ce type de tracé vous-même assez facilement en utilisant les fonctions intégrées imagesc
y text
et en ajustant un certain nombre de paramètres pour les objets graphiques. En 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 :
Si les étiquettes de l'axe des x que vous avez choisies sont trop larges et se chevauchent, voici comment vous pouvez y remédier :
Versions plus récentes de MATLAB : Je ne sais pas exactement quelle version a été ajoutée, mais dans les versions les plus récentes, les objets axes ont désormais l'attribut propriétés '{X|Y|Z}TickLabelRotation'
qui vous permettent de faire pivoter les étiquettes et de mieux les adapter.
Anciennes versions de MATLAB : Pour les versions plus anciennes, vous pouvez trouver des soumissions sur le site Échange de fichiers MathWorks qui peut faire pivoter le texte de l'étiquette de la coche, comme XTICKLABEL_ROTATE de Brian Katz .
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'images
Je pense que vous pourriez persuader Matlab de dessiner cela, si vous regardez le File Exchange, vous trouverez peut-être quelqu'un qui a déjà écrit le code. Mais il serait beaucoup plus facile, si vous n'avez pas le code, d'utiliser MS Excel.
EDIT : J'ai donc réfléchi à la question et voici ce que j'ai trouvé. Je ne maîtrise pas l'art de poster des graphiques sur SO, alors croyez-moi, cela vous mènera vers une solution. Mais honnêtement, ce serait plus facile avec Excel.
Définissez d'abord une matrice avec les valeurs de vos données ; j'appelle cette matrice G
dans ce qui suit. Exécutez ensuite les commandes :
image(G);
colormap(gray)
J'ai dû faire quelques manipulations, en remettant les données à l'échelle, pour obtenir un bon graphique, mais cela devrait produire un graphique en niveaux de gris avec des axes numériques. Allez maintenant dans votre fenêtre de figure et ouvrez les outils de tracé.
Sélectionnez l'axe X et appuyez sur la touche Ticks
bouton. Il ne vous reste plus qu'à modifier les étiquettes pour obtenir les textes que vous souhaitez. Faites de même pour l'axe des Y. Écrivez les nombres dans les carrés du tracé -- utilisez la zone de texte du menu Annotations.
Après quelques manipulations, vous obtiendrez le graphique que vous souhaitez. À ce stade, je vous suggère de choisir la commande de menu File | Generate M-File (Fichier | Générer un fichier M) et de procéder ainsi. Si vous souhaitez à l'avenir créer de tels graphiques par programmation, il vous suffira de transformer le fichier M généré en une fonction appropriée qui fera ce que vous voulez.
Mais c'est toujours beaucoup plus facile avec Excel.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.