Partage
  • Partager sur Facebook
  • Partager sur Twitter

Matplotlib

Matplotlib figure, subplots (sous fenetre graphique)

Sujet résolu
    22 juillet 2019 à 15:33:17

    Bonjour,

    Je cherche le code pour mettre les 4 graphiques dans une seule fenetre.

    import pandas as pd
    
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    
    data={'Label':[ -1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1],
          'Dseff':[ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
          'champ_major_minor':[ 0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1],
          'budget_delta2':[ 0,0,0,0,0,0,100,100,100,100,100,100,0,0,0,0,0,0,100,100,100,100,100,100,0,0,0,0,0,0,100,100,100,100,100,100,0,0,0,0,0,0,100,100,100,100,100,100],
          'P':[ 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3]}
    df_ini=pd.DataFrame(data)
    
    CST_PLAY=5
    p=4
    label='test'
    while p < CST_PLAY:
    
        i=0
        j=0
        for i in range(2):#df_ini.champ_major_minor
            if i==0 : 
                label_i="champ: minor" 
            else: 
                label_i="champ: major"
            for g in [0,100]:#df_ini.budget_delta2
                if g==0 :
                    label_g="budg: equivalent(<qtl(0.5))" 
                else: 
                    label_g="budg: bcp diff"
                fig=plt.figure()
                fig, ax1=plt.subplots()
                ax2=ax1.twinx()
                df_ini_debut_saison=df_ini[(df_ini.P<p)&(df_ini.champ_major_minor== i)&(df_ini.budget_delta2== g)]
                df_ini_debut_saison.groupby(['Dseff'])[['Label']].count().unstack().plot(ax=ax2,stacked= True,style='k--')
                (df_ini_debut_saison.groupby(['Dseff','Label'])[['Label']].count()/df_ini_debut_saison.groupby(['Dseff','Label'])[['Label']].count().groupby(level=0).sum()).unstack().plot(ax=ax1,kind='bar', stacked= True, alpha=0.5,title="Nb de Play " + str(p)+ " Nb Match : " + str(len(df_ini_debut_saison))  + "\n " + label_i + "//  " + label_g)#title="Nb de Play " + str(p)
                ax1.annotate(label,xy=(0,0),xytext=(0,-0.25))
    #            if len(df_ini_debut_saison)>0:
    #                df_ini_debut_saison.groupby(['Dseff'])[['Label']].count().unstack().plot(ax=ax2,stacked= True,style='k--')
    #                (df_ini_debut_saison.groupby(['Dseff','Label'])[['Label']].count()/df_ini_debut_saison.groupby(['Dseff','Label'])[['Label']].count().groupby(level=0).sum()).unstack().plot(ax=ax1,kind='bar', stacked= True, alpha=0.5,title="Nb de Play " + str(p)+ " Nb Match : " + str(len(df_ini_debut_saison))  + "\n " + label_i + "//  " + label_j)#title="Nb de Play " + str(p)
    #                ax1.annotate(label,xy=(0,0),xytext=(0,-0.25))
        p+=1

    Malgré le code suivant que j'ai trouvé, je n'arrive pas à l'adapter:

    fig, axes=plt.supblots(2,2,sharex=True,sharey=True)
    
    for i in range(2):
    
    for j in range(2):
    
    axes[i,j].hist(randn(500, bins=50, color='k', alpha=0.5)
    
    plt.subplots_adjust(wspace=0,hspace=0)



    • Partager sur Facebook
    • Partager sur Twitter

    Jérôme Bonneval

      22 juillet 2019 à 15:50:47

      Il faut que tu sélectionnes le sous-graphique avec lequel tu veux travailler de cette façon :
      plt.subplot(2, 2, i+j+1)
      • Partager sur Facebook
      • Partager sur Twitter
        22 juillet 2019 à 21:39:54

        Zachee54 a écrit:

        Il faut que tu sélectionnes le sous-graphique avec lequel tu veux travailler de cette façon :

        plt.subplot(2, 2, i+j+1)


        Merci pour ton attention,

        Je souhaites que les 4 sous graphiques créés par les 2 boucles for "i" et "j" soient dans la meme figure nomée "fig".

        Ca permettra de les comparer plus facilement.

        J'ai essayé d'integrer le code avant la boucle for a l'interieur sans succès. 

        Le message d'erreur est le suivant:

        ValueError: sharex [1] must be one of ['all', 'row', 'col', 'none']

        Tu l'integrerais ou?

        merci

        jerome

        • Partager sur Facebook
        • Partager sur Twitter

        Jérôme Bonneval

          23 juillet 2019 à 22:35:02

          JeromeBonneval a écrit:

          J'ai essayé d'integrer le code avant la boucle for a l'interieur sans succès. 

          Le message d'erreur est le suivant:

          ValueError: sharex [1] must be one of ['all', 'row', 'col', 'none']

          Tu l'integrerais ou?

          Si tu as bien lu mon code, tu as vu qu'il fait référence à i et j. Ca ne peut donc pas être à 36 endroits : dans ou en-dehors des boucles :-°.

          L'erreur vient du fait qu'il comprend mal les arguments passés. Tu peux essayer ça :

          index = i+j+1
          plt.subplot(nrows=2, ncols=2, index=index)

          Mais le mieux est que tu ailles voir la documentation comme le propose Nephthys

          • Partager sur Facebook
          • Partager sur Twitter
            29 juillet 2019 à 17:08:04

            C'est Résolu merci  voici le code qui va bien!
            import pandas as pd
             
            import numpy as np
            import matplotlib as mpl
            import matplotlib.pyplot as plt
            import matplotlib.style as style
            
            print(style.available) 
            style.use('seaborn-poster')#('fivethirtyeight')
            data={'Label':[ -1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1,-1,0,1],
                  'Dseff':[ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
                  'champ_major_minor':[ 0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1],
                  'budget_delta2':[ 0,0,0,0,0,0,100,100,100,100,100,100,0,0,0,0,0,0,100,100,100,100,100,100,0,0,0,0,0,0,100,100,100,100,100,100,0,0,0,0,0,0,100,100,100,100,100,100],
                  'P':[ 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3]}
            df_ini=pd.DataFrame(data)
             
            CST_PLAY=5
            p=4
            label='test'
            while p < CST_PLAY:
                fig=plt.figure()
                gs=fig.add_gridspec(2,2)
                i=0
                j=0
                for i in range(2):#df_ini.champ_major_minor
                    if i==0 :
                        label_i="champ: minor"
                    else:
                        label_i="champ: major"
                    for g in [0,100]:#df_ini.budget_delta2
                        if g==0 :
                            label_g="budg: equivalent(<qtl(0.5))"
                        else:
                            label_g="budg: bcp diff"
                        j=g
                        j/=100
                        ind=i+j+1
                        print(str(ind))
            
                        ax1=fig.add_subplot(gs[int(i),int(j)])
                        ax2=ax1.twinx()
                        df_ini_debut_saison=df_ini[(df_ini.P<p)&(df_ini.champ_major_minor== i)&(df_ini.budget_delta2== g)]
                        df_ini_debut_saison.groupby(['Dseff'])[['Label']].count().unstack().plot(ax=ax2,stacked= True,style='k--')
                        (df_ini_debut_saison.groupby(['Dseff','Label'])[['Label']].count()/df_ini_debut_saison.groupby(['Dseff','Label'])[['Label']].count().groupby(level=0).sum()).unstack().plot(ax=ax1,kind='bar', stacked= True, alpha=0.5,title="Nb Journée " + str(p)+ " Nb Matchs : " + str(len(df_ini_debut_saison))  + "\n " + label_i + "//  " + label_g)#title="Nb de Play " + str(p)
            #            (df_ini_debut_saison.groupby(['Dseff','Label'])[['Label']].count()/df_ini_debut_saison.groupby(['Dseff','Label'])[['Label']].count().groupby(level=0).sum()).unstack().plot(kind='bar', stacked= True, alpha=0.5,title="Nb de Play " + str(p)+ " Nb Match : " + str(len(df_ini_debut_saison))  + "\n " + label_i + "//  " + label_g)#title="Nb de Play " + str(p)
                        ax1.annotate(label,xy=(0,0),xytext=(0,-0.25))
            #            if len(df_ini_debut_saison)>0:
            #                df_ini_debut_saison.groupby(['Dseff'])[['Label']].count().unstack().plot(ax=ax2,stacked= True,style='k--')
            #                (df_ini_debut_saison.groupby(['Dseff','Label'])[['Label']].count()/df_ini_debut_saison.groupby(['Dseff','Label'])[['Label']].count().groupby(level=0).sum()).unstack().plot(ax=ax1,kind='bar', stacked= True, alpha=0.5,title="Nb de Play " + str(p)+ " Nb Match : " + str(len(df_ini_debut_saison))  + "\n " + label_i + "//  " + label_j)#title="Nb de Play " + str(p)
            #                ax1.annotate(label,xy=(0,0),xytext=(0,-0.25))
                p+=1

            -
            Edité par JeromeBonneval 29 juillet 2019 à 17:09:11

            • Partager sur Facebook
            • Partager sur Twitter

            Jérôme Bonneval

            Matplotlib

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown