Figures sous MATLAB, partie 2

Voici une rapide mise à jour des commentaires que j'avais précédemment donnés pour obtenir des jolies figures sous MATLAB. Comme vous le savez probablement, les deux maux les plus courants durant l'export sont l'incohérence de la taille des polices (étiquettes, ou labels souvent microscopiques), et la mauvaise qualité à l'export en PNG. Je mets à la fin également un petit conseil pour améliorer la visibilité et l'esthétique des marqueurs.


Obtenir (enfin) un bon accord de taille de polices entre MATLAB et LaTeX

Petit récapitulatif du précédent billet : sous MATLAB, la taille de la figure à l'écran et celle sur le « document imprimé » (fichier PNG, EPS ou PDF) n'ont a priori rien à voir. Il faut donc « forcer » les deux documents à avoir la même taille. On peut par exemple écrire :

mysize = [16 10]; % in centimeters
set(gcf, 'Units', 'centimeters', 'paperunits', 'centimeters', 'papersize', ...
        mysize, 'paperposition', [0 0 figsize], 'position', [0 0 figsize]); 
     % then my figure is assuredly "correct" both on screen and print

Le documents aura donc une taille de 16 x 10 cm à l'export. Cela dit, le travail n'est pas fini ! Pour un bel accord avec un document quelconque, il faut que le document exporté ait la même taille que la largeur du texte correspondant. On l'obtient en écrivant (sous LaTeX)  :

\the\columnwidth % One column width in multiple column environment
\the\textwidth   % The width of the page (regardless of number of columns)

J'ai compilé quelques valeurs pour les journaux "standards" (ceux que j'utilise)

JournalColonne (pt)Colonne (cm)Texte (pt)Texte (cm)Police (pt)
Physical Review 2468.6751017.9810
Physical Review Fluids//504 ?17.79 ?11 ?
PNAS2468.6750517.81 9
Soft Matter (RSC)2558.9952918.669
Institute of Physics//44615.7312

Un dernier aspect (que je trouve important) est d'utiliser la bonne taille de polices dans la figure. Je recommande donc d'utiliser pour :

  • le titre, les labels des axes, les légendes et les boîtes de texte : la police du texte.
  • les chiffres des axes (tick labels) : 9/10 de la police du texte.

Vous noterez que suivre mes « conseils » pour produire une figure sur une colonne donne une figure minuscule sous MATLAB :

Capture de mon écran pour une figure simple (gauche) et double (droite) colonne

L'export fonctionne correctement toutefois. N'hésitez pas à réduire la taille des marqueurs, normalement 3 et 4 points devraient convenir. Pour vous en convaincre, visitez mon document sur Overleaf qui met en application ces informations. J'ai également écrit un fichier .m appelé « prettify » qui permet d'effectuer toutes ces modifications à la volée pour la figure active sous MATLAB.


Bonne qualité à l'export en PNG

Pour cela, en fait, rien de plus simple. A partir des exemples précédents, il suffit d'utiliser la commande :

print('-dpng', gcf, 'myfigure.png', '-r600');

Le dernier argument est essentiel, car il va quantifie la résolution (en pixels par pouce) de l'image finale. Comme nos images sont petites, 600 pixels par pouce n'est pas du luxe (et vous pouvez aller, bien entendu, plus haut).


Jolis marqueurs PNG

Je me suis souvent retrouvé un peu perplexe sous MATLAB quand je voulais utiliser des symboles pleins pour représenter mes données. Leur aspect faisait un peu « jouet »

 

Couleurs standard et remplissage par défaut sous MATLAB

Pour un objet de type « ligne », le remplissage des marqueurs s'effectue avec la commande markerfacecolor :

set(gco, 'markerfacecolor', [1 0.2 0.1]); % - gco is the currently active line
                                          % - colors are specified in RGB 
                                          %   format between 0 and 1

Une bonne idée est donc d'utiliser une version un peu plus sombre de cette couleur comme bord de symbole (en allant modifier la propriété markeredgecolor) :

set(gco, 'markeredgecolor', 0.6*get(gco, 'markerfacecolor'));

Le résultat est (à mon goût) plus plaisant :

Remplissage des marqueurs « amélioré »