Bonjour,

Le développement de mon code de traçage de figure me pose pas mal de soucis en ce moment...
Je souhaite tracer le résultat de différentes simulations correspondant à plusieurs stations de mesures sur une figure.
En simple:
- 1 figure -> 6 sous-figures
- sur chaque sous-figure devrait être tracé la série d'observation et "n" séries simulées

Mon principale problème: j'arrive à tracer une série simulée, mais si j'en mets plusieurs la plus récente remplace l'ancienne.

J'ai testé hold on, hold all, à plusieurs emplacements dans le code mais rien n'y fait.

J'utilise la fonction axe pour créer mes sous-figures et les placer où je le souhaite car la fonction subplot me crée des marges énormes et ne permet pas du tout d'optimiser la place sur les figures...

Voici les deux codes que j'utilise (version simplifiées en exemple):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
figure;
                NbEpisodes=12;
                NbBestCompro=5;
                NbSubplot=1;
 
                mBot=0.02; mTop=0.03; mSides=0.05; mInterVerti=0.02; mInterHori=0.08; nbColSubplots=3; nbLignesSubplots=2; wLeg=0.1;
                wFig= (1 - mSides*2 - mInterVerti*(nbColSubplots-1) - wLeg)/nbColSubplots ; % Calcule la largeur max possible pour chaque subplot
                eFig= (1-0.06*nbLignesSubplots - mTop - mBot - mInterHori*(nbLignesSubplots-1))/nbLignesSubplots ; % Calcule la hauteur max possible pour chaque subplot
 
                Sub_Var=cell(1,NbEpisodes); % Tableau de cellules qui va recevoir l'ensemble des 'handles' des subplots
 
                c=0;
                for ligne=1:NbEpisodes/6 % permet d'avoir 2 lignes sur les figures
                    for colo=1:NbEpisodes/4 % permet d'avoir 3 colonnes sur les figures
                        c=c+1;
 
                        for z2=1:NbBestCompro
                            Sub_Var{NbSubplot}=axes('Position', [mSides+(colo-1)*wFig+(colo-1)*mInterVerti ,...
                                                                 mBot+(nbLignesSubplots-ligne)*eFig+(nbLignesSubplots-ligne+1)*mInterHori ,...
                                                                 wFig , eFig] , 'Units', 'Normalized'); % Positionne le subplot pour l'épisode en cours
 
                               [H1, H2]=TracePlot(c,z2,NbBestCompro);
 
                        end
                        NbSubplot=NbSubplot+1;
                    end
                end
 
            LegPos=axes('Position', [0.85 0.1 0.12 0.5], 'Units', 'Normalized'); 
            axis off
            h=legend(LegPos,[H1;H2],'Obs-20','Sim-20','Obs-40','Sim-40','Obs-60','Sim-60','Rain');
            set(h,'color','w', 'fontsize',10);
et le code de la fonction "TracePlot" qui fait le travail de traçage:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
function [H1, H2]=TracePlot(c,ite,iteMax)
 
o1=rand(1,4)';
s1=o1+0.02;
o2=rand(1,4)';
s2=o2+0.015;
o3=rand(1,4)';
s3=zeros(4,1);
for i=1:4
    if o3(i)-0.07<0
        s3(i)=0;
    else
        s3(i)=o3(i)-0.07;
    end
end
 
[AX,H1,H2]=plotyy(1:4,[o1,s1,o2,s2,o3,s3],1:4,rand(1,4)'*2,'plot','bar');
 
title(strcat({'Episode: '},{int2str(c)}), 'FontSize',10,'FontWeight','bold');
set(AX,{'ycolor'},{'k';'b'})
 
if ite==iteMax % Dernières valeurs
        set(H1(1),'color',[0 0 0],'LineStyle','o','markersize',3); 
        set(H1(2),'color',[0 0 0],'LineStyle','-');
 
        set(H1(3),'color',[0.0 0.6 0.3],'LineStyle','s','markersize',3);
        set(H1(4),'color',[0.0 0.6 0.3],'LineStyle','-');
 
        set(H1(5),'color',[0.8 0.3 0.6],'LineStyle','^','markersize',3);
        set(H1(6),'color',[0.8 0.3 0.6],'LineStyle','-');
else
        set(H1(1),'color',[0.0 0.0 0.0],'LineStyle','o','markersize',3);
        set(H1(2),'color',[0.7 0.7 0.7],'LineStyle','-');
 
        set(H1(3),'color',[0.0 0.6 0.3],'LineStyle','s','markersize',3);
        set(H1(4),'color',[0.5 0.9 0.4],'LineStyle','-');
 
        set(H1(5),'color',[0.8 0.3 0.6],'LineStyle','^','markersize',3);
        set(H1(6),'color',[1.0 0.6 0.8],'LineStyle','-');
end
 
set(AX(1),'YLim',[0 1.5],'YTick',0:0.5:5);
if c==1 || c==4 || c==7 || c==10 % N'affiche le titre de l'axe des ordonnées que pour le premier épisode de chaque ligne
    set(AX(1),'YTickLabel',sprintf('%.2f|',0:0.5:5),'FontSize',8)
    ylabel('Ordonnee1','color','k','FontSize',10);
else
    set(AX(1),'YTickLabel',{}) % N'affiche pas les 'labels' sur l'axe des ordonnées, que les 'Ticks'
end
 
set(AX(1),'XLim',[0 5],'XTick',0:1:5,'XTickLabel',0:1:5, 'fontsize', 9);
set(AX(2),'XLim',[0 5],'XTick',0:1:5, 'XTickLabel', {});
if c==4 || c==5 || c==6 || c==10 || c==11 || c==12
   xlabel(AX(1),'Abscisse','color','k','FontSize',10);
   xlabel(AX(2),{});
end
 
    set(AX(2),'YDir','reverse');
    set(AX(2),'YLim',[0 10],'ytick',0:2:10)
 
 
    set(H2,'FaceColor','b','EdgeColor','b');
    box(AX(1),'off');
 
    if c==3 || c==6 || c==9 || c==12 % N'affiche le titre de l'axe des ordonnées que pour le dernier épisode de chaque ligne
        set(AX(2),'YTickLabel',sprintf('%.0f|',0:2:10),'FontSize',8)
        ylabel(AX(2),'Ordonnee2','color','b','FontSize',10);
    else
        set(AX(2),'YTickLabel',{}) % N'affiche pas les 'labels' sur l'axe des ordonnées, que les 'Ticks'
    end
end

J'ai essayer de condenser au maximum le code pour en laisser que la mise en forme, je me doute qu'il doit y avoir un soucis avec l'utilisation de hold on (appel au mauvais moment, ne s'applique pas à axe,etc.) ou quelque chose de plus profond mais je galère pour trouver et comme le traçage d'une seule série est OK je suis perdu...

Si quelqu'un peut m'aider, ce serait top !

Bonne journée.

PS: une petite illustration pour faire passer le pavé de code... vraiment désolé d'ailleurs...