Bonjour,

Je suis débutante en Python et je bloque depuis un moment sur une représentation graphique dans une figure avec 2 lignes et 5 colonnes dans une boucle while.
Voici le code que j'ai écrit le problème est dans les boucles while, j'ai bien l'affichage des graphiques mais un par un pas dans la figure avec les 10 subplot.... De plus la figure ne s'enregistre pas ....
Est-ce que quelqu'un pourrait m'aider, cela fait quelques jours que je cherche une solution....

Merci d'avance pour votre aide!

Bea

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# Initialisation boucle while
cycle_avant = -10
pos_avant = 1
plt.figure(figsize=(15, 7))
pyplot.gcf().subplots_adjust(left = 0.1, bottom = 0.3, right = 0.8, top = 0.9, wspace = 0.08, hspace = 0.35)
 
#Calcul du débit moyen, max, min, dépassement moyen d'un cycle complet de filtration
for Periode in dfCycle.index:
 
    #Extraction des débits sur la période du cycle complet de filtration
    dtDebCyc = dfCycle.iloc[Periode,0]
    dtFinCyc = dfCycle.iloc[Periode,1]
 
 
 
    #calcul de la moyenne, max, min
    #print(dtDeb, dtFin)
    dfDebitCycle = dfDebitFiltration.iloc[dfDebitFiltration.index.searchsorted(dtDebCyc):dfDebitFiltration.index.searchsorted(dtFinCyc)]
 
    #Parenthèse pour graphiques 10 cycles avant et 10 cycle après les lavages à la soude
 
    # Premier lavage à la soude 142j = 27/11/2014  19:58:09
 
    if pos_avant <= 10:
 
        while dtDebCyc == (datetime(year=2014, month=11, day=19, hour=15, minute=22, second=53)) or dtDebCyc == (datetime(year=2014, month=11, day=20, hour=6, minute=53, second=38)) or dtDebCyc == (datetime(year=2014, month=11, day=20, hour=22, minute=7, second=47)) or dtDebCyc == (datetime(year=2014, month=11, day=21, hour=8, minute=47, second=52)) or dtDebCyc == (datetime(year=2014, month=11, day=24, hour=8, minute=48, second=34)) or dtDebCyc == (datetime(year=2014, month=11, day=25, hour=6, minute=34, second=31)) or dtDebCyc == (datetime(year=2014, month=11, day=25, hour=21, minute=12, second=2)) or dtDebCyc == (datetime(year=2014, month=11, day=26, hour=11, minute=26, second=3)) or dtDebCyc == (datetime(year=2014, month=11, day=27, hour=2, minute=21, second=20)) or dtDebCyc == (datetime(year=2014, month=11, day=27, hour=19, minute=58, second=9)):          
            dfDebitCycle['Date (j)'] = dfDebitCycle.index- dtDebCyc
            dfDebitCycle['Date (j)'] = dfDebitCycle['Date (j)'] / np.timedelta64(1, 's')/60/60
 
            plt.subplot(2,5,pos_avant) # je divise la figure en 4 colonnes et je représente le graphique 1 dans la première colonne
            plt.scatter(dfDebitCycle['Date (j)'], dfDebitCycle['Débit'], facecolor='none', edgecolor='blue', label='Q', marker='o', s = 10)
            print(pos_avant, 'position')
            print(cycle_avant, 'cycle')
            #plt.xlim(0, 24)
            #plt.ylim(10000, 40000)
            #plt.yticks([21.8, 22.1, 22.4, 22.7, 23, 23.3]) # Fixe le pas de temps des graduations
            plt.xticks(fontsize=10)
            plt.yticks(fontsize=10)
            plt.xlabel('t (h)', fontsize=10)
            plt.ylabel('Débit (m$^3$/h)', fontsize=10)
            plt.title(repr(cycle_avant) + ' j' , fontsize=10)
            plt.show()
 
            cycle_avant = cycle_avant +1
            pos_avant = pos_avant +1
 
            break
 
        if pos_avant == 11:
            plt.show()
            path = 'C:/Users/b_gonzal/Desktop/Beatriz/Thèse/Lavages (Méca Fluides)/Bilan matière lavages/Optimisation modèle accu solide_14-02-2022/'
            os.chdir(path)
            plt.savefig('Débit_10j_avant_LS1.png', dpi =600, bbox_inches='tight') # bbox_inches='tight' permet de ne pas couper des zones du graphique (ajuste la taille de la figure)
            plt.savefig('Débit_10j_avant_LS1.pdf', dpi=600, bbox_inches='tight') # bbox_inches='tight' permet de ne pas couper des zones du graphique (ajuste la taille de la figure)
 
 
 
    # Initialisation boucle while
    cycle_apres = 1
    pos_apres = 1
    plt.figure(figsize=(15, 7))
    pyplot.gcf().subplots_adjust(left = 0.1, bottom = 0.3, right = 0.8, top = 0.9, wspace = 0.08, hspace = 0.35)
 
    while dtDebCyc == (datetime(year=2014, month=12, day=1, hour=10, minute=21, second=59)) or dtDebCyc == (datetime(year=2014, month=12, day=1, hour=14, minute=12, second=18)) or dtDebCyc == (datetime(year=2014, month=12, day=2, hour=0, minute=0, second=21)) or dtDebCyc == (datetime(year=2014, month=12, day=2, hour=13, minute=17, second=19)) or dtDebCyc == (datetime(year=2014, month=12, day=3, hour=2, minute=13, second=21)) or dtDebCyc == (datetime(year=2014, month=12, day=3, hour=21, minute=52, second=29)) or dtDebCyc == (datetime(year=2014, month=12, day=4, hour=13, minute=33, second=25)) or dtDebCyc == (datetime(year=2014, month=12, day=5, hour=9, minute=57, second=28)) or dtDebCyc == (datetime(year=2014, month=12, day=6, hour=1, minute=46, second=31)) or dtDebCyc == (datetime(year=2014, month=12, day=6, hour=22, minute=42, second=32)):
        dfDebitCycle['Date (j)'] = dfDebitCycle.index- dtDebCyc
        dfDebitCycle['Date (j)'] = dfDebitCycle['Date (j)'] / np.timedelta64(1, 's')/60/60
 
        plt.subplot(2,5,pos_apres) # je divise la figure en 5 colonnes
        plt.scatter(dfDebitCycle.index-dtDebCyc, dfDebitCycle['Débit'], facecolor='none', edgecolor='blue', label='Q', marker='o', s = 10)
        print(pos_apres, 'position')
        print(cycle_apres, 'cycle')
        #plt.xlim(0, 24)
        #plt.ylim(10000, 40000)
        #plt.yticks([21.8, 22.1, 22.4, 22.7, 23, 23.3]) # Fixe le pas de temps des graduations
        plt.xticks(fontsize=10)
        plt.yticks(fontsize=10)
        plt.xlabel('t (h)', fontsize=10)
        plt.ylabel('Débit (m$^3$/h)', fontsize=10)
        plt.title(repr(cycle_apres) + ' j' , fontsize=16)
        plt.show()
 
        cycle_apres = cycle_apres +1
        pos_apres = pos_apres +1
 
        break
 
 
    if pos_apres == 11:
        plt.show()
        path = 'C:/Users/b_gonzal/Desktop/Beatriz/Thèse/Lavages (Méca Fluides)/Bilan matière lavages/Optimisation modèle accu solide_14-02-2022/'
        os.chdir(path)     
        plt.savefig('Débit_10j_après_LS1.png', dpi=600, bbox_inches='tight') # bbox_inches='tight' permet de ne pas couper des zones du graphique (ajuste la taille de la figure)
        plt.savefig('Débit_10j_après_LS1.pdf', dpi=600, bbox_inches='tight') # bbox_inches='tight' permet de ne pas couper des zones du graphique (ajuste la taille de la figure)
 
 
    # Deuxième lavage à la soude 292j = 26/04/2015  10:37:39
 
 
 
 
    # Troisième lavage à la soude 544j = 04/01/2016  07:29:54
 
 
 
    # Quatrième lavage à la soude 729j = 05/07/2016  23:02:52
 
 
 
 
 
 
 
 
    # Arrondi de la date à l'heure inférieure ("floor", utiliser "ceil" si on veut arrondir à l'heure supérieure)
    dfDebitCycleHoraire =dfDebitCycle
    dfDebitCycleHoraire['Date Horaire'] = dfDebitCycleHoraire.index
    dfDebitCycleHoraire['Date Horaire'] = dfDebitCycleHoraire['Date Horaire'].apply(lambda x: x.floor('60 min'))
 
 
 
    if (not(dfDebitCycle.empty)):
        DebitInitialCycle = dfDebitFiltration.iloc[dfDebitFiltration.index.searchsorted(dtDebCyc),0]
        #Calcul Débit initial de cycle de filtration
        dfDebitInitialCycle = pd.DataFrame({'': [dtDebCyc, dtFinCyc, float(DebitInitialCycle)]}, index = ['Début cycle filtration', 'Fin cycle filtration', 'Débit initial']).transpose()
        #Concaténation des périodes dans un dataframe complet
        dfQinitialCycle = pd.concat([dfQinitialCycle, dfDebitInitialCycle], axis=0)
 
 
    if(not(dfDebitCycle.empty)):
        # Moyenne du cycle, max et min
        dfMoyenneCycle = pd.DataFrame({'': [dtDebCyc, dtFinCyc, float(dfDebitCycle['Débit'].mean()), float(dfDebitCycle['Débit'].max()), float(dfDebitCycle['Débit'].min())]}, index = ['Début cycle filtration', 'Fin cycle filtration', 'Débit moyen', 'Débit max', 'Débit min']).transpose()
        #Concaténation des moyennes dans un dataframe complet
        dfMoyenne = pd.concat([dfMoyenne, dfMoyenneCycle], axis=0)
 
        # Moyenne du cycle, max et min horaires
 
        dfDebitCycle_i_Horaire = dfDebitCycleHoraire.pivot_table('Débit', 'Date Horaire', aggfunc=np.mean)
 
        dfMoyenneCycleHoraire = pd.DataFrame({'': [dtDebCyc, dtFinCyc, float(dfDebitCycleHoraire.pivot_table('Débit', 'Date Horaire', aggfunc=np.mean)['Débit'].mean()), float(dfDebitCycleHoraire.pivot_table('Débit', 'Date Horaire', aggfunc=np.mean)['Débit'].max()), float(dfDebitCycleHoraire.pivot_table('Débit', 'Date Horaire', aggfunc=np.mean)['Débit'].min())]}, index = ['Début cycle filtration', 'Fin cycle filtration', 'Débit moyen horaire', 'Débit max horaire', 'Débit min horaire']).transpose()
        dfMoyenneHoraire = pd.concat([dfMoyenneHoraire, dfMoyenneCycleHoraire], axis=0)
 
#Ajout d'un index
dfMoyenne.index = range(1,len(dfMoyenne)+1)        
dfMoyenneHoraire.index = range(1,len(dfMoyenneHoraire)+1)  
dfQinitialCycle.index = range(1,len(dfQinitialCycle)+1)
 
#Mise en forme des colonnes
#dfMoyenne['Début cycle filtration'] = dfMoyenne['Début cycle filtration'].apply(lambda x: x.strftime('%d/%m/%Y %H:%M:%S'))
#dfMoyenne['Fin cycle filtration'] = dfMoyenne['Fin cycle filtration'].apply(lambda x: x.strftime('%d/%m/%Y %H:%M:%S'))
#dfMoyenneHoraire['Début cycle filtration'] = dfMoyenneHoraire['Début cycle filtration'].apply(lambda x: x.strftime('%d/%m/%Y %H:%M:%S'))
#dfMoyenneHoraire['Fin cycle filtration'] = dfMoyenneHoraire['Fin cycle filtration'].apply(lambda x: x.strftime('%d/%m/%Y %H:%M:%S'))
#dfQinitialCycle['Début cycle filtration'] = dfQinitialCycle['Début cycle filtration'].apply(lambda x: x.strftime('%d/%m/%Y %H:%M:%S'))
#dfQinitialCycle['Fin cycle filtration'] = dfQinitialCycle['Fin cycle filtration'].apply(lambda x: x.strftime('%d/%m/%Y %H:%M:%S'))
 
#dfMoyenne['Débit moyen'] = dfMoyenne['Débit moyen'].astype(float).round()
dfMoyenneHoraire['(Qmax-Qmin)/Qmoyen'] = (dfMoyenneHoraire['Débit max horaire'] - dfMoyenneHoraire['Débit min horaire'])/dfMoyenneHoraire['Débit moyen horaire']