IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Subplot multiples dans une boucle


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur de recherche
    Inscrit en
    Mars 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de recherche

    Informations forums :
    Inscription : Mars 2022
    Messages : 9
    Par défaut Subplot multiples dans une boucle
    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']

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Salut,

    Si vous voulez utilisez .subplot, ouvrez la documentation.

    Elle renvoie a plein d'exemples qui montrent comment faire. Vous essayez de comprendre comment ça fonctionne puis vous adaptez..

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Remarque:
    lorsque tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ...:
        ...
        break
    le corps du bloc du while n'est exécuté qu'une seule fois car break met fin à la boucle.

  4. #4
    Membre du Club
    Femme Profil pro
    Ingénieur de recherche
    Inscrit en
    Mars 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de recherche

    Informations forums :
    Inscription : Mars 2022
    Messages : 9
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Bonjour,
    Remarque:
    lorsque tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ...:
        ...
        break
    le corps du bloc du while n'est exécuté qu'une seule fois car break met fin à la boucle.
    Merci, oui mais j'ai dû rajouter break car comme le boucle while est imbriquée dans une boucle for, chaque subplot depend des valeurs calculées dans la boucle for.
    Donc la première fois qu'on rentre dans la boucle while ce sont les valeurs du subplot(2,5,1) et donc je veux sortir de la boucle while et exécuter le reste du code en dessous et faire tourner la boucle for jusqu'à ce que la condition pour entrer une 2ème fois dans la boucle while est true et là j'aurais mes données pour le subplot(2,5,2) ete ainsi de suite.
    Si je ne mets pas de break, la boucle while tourne jusqu'à ce que pos_avant >10 (condition dans le if) car la valeur dtDebCyc est toujours la même (elle ne change que dans la boucle for...) et j'aurais la même courbe sur tous les subplot...

  5. #5
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par Bea_GV Voir le message
    Merci, oui mais j'ai dû rajouter break car comme le boucle while est imbriquée dans une boucle for, chaque subplot depend des valeurs calculées dans la boucle for.
    Donc la première fois qu'on rentre dans la boucle while ce sont les valeurs du subplot(2,5,1) et donc je veux sortir de la boucle while et exécuter le reste du code en dessous et faire tourner la boucle for jusqu'à ce que la condition pour entrer une 2ème fois dans la boucle while est true et là j'aurais mes données pour le subplot(2,5,2) ete ainsi de suite.
    Je n'ai pas besoin de comprendre ton code ou tes intentions pour comprendre que tes boucles while ne servent à rien (ils ne boucleront jamais le bloc code de while) avec la présence du break.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> while True:
    	print('hello')
    	break
     
    hello
    >>>
    comme tu peux le voir même avec un while qui est toujours à True, le bloc n'est jamais rebouclé.


    En fait, à suivre tes explications, j'ai l'impression que tu évoques le fonctionnement d'un if.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> for b in (False, True, False, True):
    	while b==True:
    		print('coucou')
    		break
     
     
    coucou
    coucou
    >>>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> for b in (False, True, False, True):
    	if b: # b == True
    		print('coucou')
     
     
    coucou
    coucou
    >>>

  6. #6
    Membre du Club
    Femme Profil pro
    Ingénieur de recherche
    Inscrit en
    Mars 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de recherche

    Informations forums :
    Inscription : Mars 2022
    Messages : 9
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Je n'ai pas besoin de comprendre ton code ou tes intentions pour comprendre que tes boucles while ne servent à rien (ils ne boucleront jamais le bloc code de while) avec la présence du break.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> while True:
    	print('hello')
    	break
     
    hello
    >>>
    comme tu peux le voir même avec un while qui est toujours à True, le bloc n'est jamais rebouclé.


    En fait, à suivre tes explications, j'ai l'impression que tu évoques le fonctionnement d'un if.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> for b in (False, True, False, True):
    	while b==True:
    		print('coucou')
    		break
     
     
    coucou
    coucou
    >>>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> for b in (False, True, False, True):
    	if b: # b == True
    		print('coucou')
     
     
    coucou
    coucou
    >>>


    Le problème est que sans le break, une fois que la condition du while est true, je ne sors jamais du while.... et donc j'ai 10 fois la même courbe... Le break me sert à sortir du while et extraire de nouvelles données dans la boucle for et la nouvelle condition pour rentrer ou pas dans la boucle while de nouveau. J'obtiens bien les graphiques des 10 cycles sauf qu'ils sont affichés le uns à la suite des autres et non pas dans les subplot avec 2 lignes et 5 colonnes et en plus de ça la figure n'est pas enregistrée sur mon ordi.
    Non le if est juste là pour ne plus entrer dans le while lorsque j'ai déjà mes 10 graphiques car il continuait à essayer de mettre un autre graphique après mes 10 subplot et donc j'avais une erreur. Ceci dit l'erreur s'affichait avant de mettre le break, je pense qu'avec le break je n'ai plus besoin du if

  7. #7
    Membre du Club
    Femme Profil pro
    Ingénieur de recherche
    Inscrit en
    Mars 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de recherche

    Informations forums :
    Inscription : Mars 2022
    Messages : 9
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Je n'ai pas besoin de comprendre ton code ou tes intentions pour comprendre que tes boucles while ne servent à rien (ils ne boucleront jamais le bloc code de while) avec la présence du break.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> while True:
    	print('hello')
    	break
     
    hello
    >>>
    comme tu peux le voir même avec un while qui est toujours à True, le bloc n'est jamais rebouclé.


    En fait, à suivre tes explications, j'ai l'impression que tu évoques le fonctionnement d'un if.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> for b in (False, True, False, True):
    	while b==True:
    		print('coucou')
    		break
     
     
    coucou
    coucou
    >>>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> for b in (False, True, False, True):
    	if b: # b == True
    		print('coucou')
     
     
    coucou
    coucou
    >>>

    Bon en effet ma boucle while sans ou avec break ne servait à rien, je peux m'en passer et profiter de la boucle for pour incrémenter la position des subplot.
    Donc je simplifie le code qui ne marche toujours pas:

    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
     
    #Initialisation des compteurs
     
    cycle_avant = -10
    pos_avant = 1
     
    #Création de la figure
     
    plt.figure(figsize=(15, 7))
     
     
    #Extraction des "cycles" (=parties du dataframe dfDebitFiltration grâce à un autre dataframe (dfCycle) qui contient la date de début (dtDebCyc) et de fin des cycles (dtFinCyc)
     
    for Periode in dfCycle.index:
     
        # Récupération des dates de début et fin de cycle
     
        dtDebCyc = dfCycle.iloc[Periode,0]
        dtFinCyc = dfCycle.iloc[Periode,1]
     
     
        #Extraction des débits sur la période du cycle complet de filtration
     
        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
     
        # Graphique avec 10 subplot pour 10 cycles identifiés par leur date de démarrage
        if pos_avant<=10:
            if 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)):       
     
                plt.subplot(2,5,pos_avant)
     
                plt.scatter(dfDebitCycle['Date (j)'], dfDebitCycle['Débit'], facecolor='none', edgecolor='blue', label='Q', marker='o', s = 10)
     
                #Actualisation des compteurs
     
                cycle_avant = cycle_avant +1
                pos_avant = pos_avant +1

  8. #8
    Membre du Club
    Femme Profil pro
    Ingénieur de recherche
    Inscrit en
    Mars 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de recherche

    Informations forums :
    Inscription : Mars 2022
    Messages : 9
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Si vous voulez utilisez .subplot, ouvrez la documentation.

    Elle renvoie a plein d'exemples qui montrent comment faire. Vous essayez de comprendre comment ça fonctionne puis vous adaptez..

    - W
    Merci, je suis allée regarder mais cela ne me donne pas la réponse car mon problème est dans la boucle while. J'ai déjà utilisé ce type de graphique sans boucle avec plusieurs subplot sans problème.

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Citation Envoyé par Bea_GV Voir le message
    Merci, je suis allée regarder mais cela ne me donne pas la réponse car mon problème est dans la boucle while. J'ai déjà utilisé ce type de graphique sans boucle avec plusieurs subplot sans problème.
    Votre problème est de construire une solution. Pour ça, il faut simplifier votre code pour y virer tout ce qui n'a aucun rapport avec la création des subplots (afficher NxM fois la même figure, ça aide à simplifier) et essayer de comprendre ce qui ne fonctionne pas... ou complexifer un code qui fonctionne.

    Et si le problème est "ailleurs", vous aurez un petit exemple à montrer (qu'on pourra reproduire si on ne comprend pas par simple lecture): pas un truc de 200 lignes qui donne mal à la tête à lire (vous n'y êtes pour rien, vous débutez... mais si vous voulez de l'aide, il faut montrer que vous avez bossé un peu pour comprendre ce qu'il se passe et ça c'est un code de quelques dizaines de lignes!).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre du Club
    Femme Profil pro
    Ingénieur de recherche
    Inscrit en
    Mars 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de recherche

    Informations forums :
    Inscription : Mars 2022
    Messages : 9
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Votre problème est de construire une solution. Pour ça, il faut simplifier votre code pour y virer tout ce qui n'a aucun rapport avec la création des subplots (afficher NxM fois la même figure, ça aide à simplifier) et essayer de comprendre ce qui ne fonctionne pas... ou complexifer un code qui fonctionne.

    Et si le problème est "ailleurs", vous aurez un petit exemple à montrer (qu'on pourra reproduire si on ne comprend pas par simple lecture): pas un truc de 200 lignes qui donne mal à la tête à lire (vous n'y êtes pour rien, vous débutez... mais si vous voulez de l'aide, il faut montrer que vous avez bossé un peu pour comprendre ce qu'il se passe et ça c'est un code de quelques dizaines de lignes!).

    - W
    Merci, je vais essayer mais les données sont très complexes j'ai au total plusieurs millions de valeurs pour une vingtaines de variables et se sont des données temporelles avec un pas de temps qui n'est jamais le même...
    Le problème est qu'il s'agit de données d'exploitation sur site, donc des données d'automates et le réacteur en question qui m'intéresse ne fonctionne pas en continu (mode filtration, mode lavage et mode arrêt en attente de filtration car dans la journée cela tourne entre tous les réacteurs....). Donc pour avoir des données sur un cycle complet de filtration il faut au moins 3000 lignes et beaucoup de boucles pour extraire les données, pour identifier quandle réacteure est entrain de filtrer, quand il est en arrêt, quand il est en lavage et identifier quand un cycle commence et quand est ce qu'il finit..... Et tout cela pour le réacteur étudié car l'automate enregistre en continu, des fois elles correspondent à un réacteur ou a un autre ou à plusieurs en même temps....
    Pour ce graphique en question il faudrait minimum 3000 lignes x 10 cycles = 30 000 lignes...
    Et justement ce qui rend difficile pour moi le code est que je ne peux pas seulement prendre la boucle while et vous envoyer des données simples car il me faut la boucle for pour extraire les données nécessaires à représenter dans le while...

    Cela est très difficile à expliquer par texte et je comprend que vous ne puissiez pas m'aider. En tout cas merci de vous y avoir intéressé

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Citation Envoyé par Bea_GV Voir le message
    Merci, je vais essayer mais les données sont très complexes j'ai au total plusieurs millions de valeurs pour une vingtaines de variables et se sont des données temporelles avec un pas de temps qui n'est jamais le même...
    Simplifiez vos données: la répétition de la droite X = Y = list(range(10)) pour voir comment afficher plusieurs "subplots" suffit.
    Les histoires de changements de pas de temps sont des calculs à reporter sur l'axe des abscisses: rien à voir avec la question posée.

    Citation Envoyé par Bea_GV Voir le message
    Cela est très difficile à expliquer par texte et je comprend que vous ne puissiez pas m'aider. En tout cas merci de vous y avoir intéressé
    J'essaie de vous aider en vous recommandant de découper le problème initial en sous-problèmes à traiter indépendamment les uns des autres. Puis c'est une composition entre des "bouts" qui fonctionnent...

    Citation Envoyé par Bea_GV Voir le message
    Merci, je vais essayer mais les données sont très complexes j'ai au total plusieurs millions de valeurs pour une vingtaines de variables et se sont des données temporelles avec un pas de temps qui n'est jamais le même...
    Qu'il y ait 10 lignes à traiter ou plusieurs millions... ne devrait pas fondamentalement changer la structure du code: à priori, vous devriez juste constater des dépassements mémoire ou des lenteurs d'exécution.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. subplot dans une boucle
    Par sanzorairfix dans le forum Général Python
    Réponses: 0
    Dernier message: 18/05/2015, 11h52
  2. [Python 2.X] subplot dans une boucle ?
    Par membreComplexe12 dans le forum Général Python
    Réponses: 8
    Dernier message: 10/02/2015, 19h26
  3. Réponses: 2
    Dernier message: 28/02/2013, 22h24
  4. Réponses: 7
    Dernier message: 22/02/2012, 10h24
  5. Probleme dans une boucle multiple
    Par NewYork dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/03/2011, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo