Archives pour la catégorie Accélerer la création des figures

Optimiser les performances graphiques

Le 15 mai 2012 je donnais une astuce pour accélérer la création de plusieurs figures

Aujourd’hui je vais vous présenter une astuce pour accélérer le rafraichissement de vos graphiques.

J’ai trouvé un super lien dans la doc MATLAB à ce sujet: Optimizing Graphics Performance

A un moment donné un des conseils donné est « Setting All Modes to Manual« . Et un tableau plus bas donne en effet toutes les propriétés de l’axe à modifier.
Et là je me suis dit « c’est con qu’il n’y ait pas un code tout fait pour le faire! »

Et beh en fait si!
Il suffit de lire la section plus bas : « Update the Object’s Data » qui fournit un exemple et un lien pour l’éditer.

edit ([docroot '/techdoc/creating_plots/examples/doc_perfex']);

voir la sous function ManAxMode

Donc comme conseillé dans la page on fait d’avoir:

figure('Renderer','painters')

puis on utilise cette fonction :

    % This function sets most axes mode properties to manual
    function ManAxMode(h)
    % Do not set CameraViewAngleMode, DataAspectRatioMode,
    % and PlotBoxAspectRatioMode to aviod exposing a bug
    pn = {'ALimMode',...
        'CameraPositionMode','CameraTargetMode',...
        'CameraUpVectorMode','CLimMode',...
        'TickDirMode','XLimMode',...
        'YLimMode','ZLimMode',...
        'XTickMode','YTickMode',...
        'ZTickMode','XTickLabelMode',...
        'YTickLabelMode','ZTickLabelMode'};
    for k = 1:15
        pv(k) = {'manual'};
    end
    set(h,pn,pv)
    end

Et je confirme ça accélère grave !!

Accélerer la création de figures avec clf

On est souvent amener à créer pleins de figures différentes qu’on souhaite ensuite sauvegarder.
On remarque que MATLAB s’essouffle rapidement lorsqu’on a un tas de figures à processer.
Généralement le code ressemble à peu près à ça :

tic
for iteration = 1:50
 figure
 plot(rand(10,2));
 title(['plot: ' num2str(iteration)]);
 print(['file_' num2str(iteration) '.jpg']);
 close all
end
toc

Ici on a donc généré 50 jpeg avec une boucle for. Sur mon pc 10 secondes sont requises. C’est là que clf prend tout son sens …