Faire des figures sous MATLAB

MATLAB (ou Octave) est un outil efficace pour traiter des larges quantités de données de formats disparates. Contrairement à Octave, MATLAB n'a pas de sortie Gnuplot et doit donc se débrouiller tout seul pour exporter ses figures. Par défaut, le résultat n'est pas toujours satisfaisant.

Tracés par défaut de MATLAB. Pas mauvais, pas top.
Tracés par défaut de MATLAB. Pas mauvais, pas top.

Taille d'image et de police

Réussir à obtenir la taille de police et d'image (que ce soit en format vectoriel ou matriciel) relève parfois du parcours du combattant. En fait, il faut d'abord se munir d'une information essentielle au document .tex, la largeur du texte (ou de la colonne), qui s'obtient en insérant dans son code TeX les lignes suivantes :

\the\columnwidth
\the\textwidth

Pour mes articles scientifiques, \textwidth donne 510.0pt. Il faut alors recopier la valeur dans plusieurs paramètres de la figure de MATLAB pour que celle-ci daigne faire la bonne taille : paperposition, paperwidth, et paperunits :

set(gca, 'fontsize', 12);
set(gcf, 'paperunits'   , 'points',          'position', [100 100 510 300], ...
         'paperposition', [100 100 510 300], 'papersize', [510 300]);

qui va donc bien imposer une taille de police de 12 points sur une figure qui en fait 510 de large. Depuis la version 2014b, il semble également que la taille des images matricielles (.png par exemple) respecte également ces tailles. Hourra ! N'oubliez pas de spécifier l'argument paperunits avant papersize au risque de tout mettre à une échelle gigantesque.


Accord de polices légende / texte

MATLAB (> R2014b) arrive maintenant à mettre les chiffres des axes en LaTeX. Hourra !

set(gca, 'TickLabelInterpreter', 'latex');

Symboles

Je ne suis pas fan des marqueurs de MATLAB depuis la R2014b. Traçons :

plot([1 2 3 4 5 6], [1.1 1.0 1.05 0.95 1.0 0.98], 'o')

puis exportons le résultat en .pdf :

Symbole circulaire chez MATLAB. Archimède ne serait pas super content.
Symbole circulaire chez MATLAB. Archimède ne serait pas super content.

Je ne sais pas comment résoudre ce souci directement sous MATLAB pour le moment.


qTikZ / matlab2TikZ

Si vous voulez des fichiers .pdf plus propres, qui permettent une belle homogénéité de vos documents et pas trop d'imprévus, vous pouvez utiliser :

  • matlab2TikZ, qui convertit les fichiers .fig en fichiers .tex
  • qTikZ, un éditeur qui compile en temps réel vos figures et permet un export en .pdf sans marges inutiles.

L'édition en TikZ/pgfplots donne d'excellents résultats. Quelques petits détails (souvent également présents sous MATLAB) sont parfois à régler (notations scientifiques un peu envahissantes, échelles de couleurs à re-préciser, ...) mais le résultat est assez confortable. La gestion de la taille des polices est également plus naturelle. Les cercles sont bien des cercles.

Sortie par défaut de QTikZ
Sortie par défaut de QTikZ

Addendum sur les échelles de couleur

Les échelles de couleur (colormaps) permettent de visualiser des données à deux (voire plus) dimensions aisément, en transformant des grandeurs scalaires en couleurs normalisées par une échelle. Malheureusement, les échelles par défaut, notamment jet, sont assez communément haïes pour leurs imperfections. Parula, depuis MATLAB R2014b, fait un excellent travail même si celle-ci n'est pas libre de droits. Viridis est une alternative libre à celle-ci, qui possède l'avantage d'être bien lisible pour les daltoniens. Cbrewer est également un petit script permettant de construire quelques colormaps pratiques.

Leave a Comment