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 :

est-il possible d'effacer une partie d'un graphe avec la bibliothèque matplotlib ?


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 49
    Points : 50
    Points
    50
    Par défaut est-il possible d'effacer une partie d'un graphe avec la bibliothèque matplotlib ?
    Bonjour,

    Voilà je vous explique. Mon but est de superposer un histogramme avec avec une courbe afin de voir la valeur de certains paramètre dans une distribution donnée... bref je vous passe les détails.

    Le truc c'est que je crée d'abord l'histogramme, puis la courbe (en faisant un "twinx()" pour avoir un second axe sur la droite).

    Jusqu'ici tout va bien. cependant j'ai plusieurs paramètres à plotter. Donc, plutôt que de TOUT effacer à chaque fois et tout refaire, je me demandais s'il était possible d'effacer juste le plot et pas l'histogramme. Mon code ressemble "à peu près" à ça:

    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
     
        #initialisation
        fig=plt.figure();keys=paramlist.keys();l=len(keys)
     
        #hitogramme
        a1x = fig.add_subplot(111)
        a1x.hist(paramlist.values(),binlist,label=keys)    
        plt.legend()
        if is_log:
            plt.xscale('log')
        plt.xlabel("Mass in terrestrial mass")
        a1x.set_ylabel("number of models")
        plt.title(title)
     
     
        #plot
        x,y,var=simulist.make_mean_paramlist(binlist,paramlist)  # ca me crée mon x,y et ma variance sur y
        ax2 = a1x.twinx()
    #    ax2.plot(x, y, 'r.')
        ax2.errorbar(x,y,yerr=var,fmt=None, marker=None, mew=0 )
        ax2.set_ylabel('blabla', color='r')
        for tl in ax2.get_yticklabels():
            tl.set_color('r')    
     
            plt.savefig(nameplot)
    Comment effacer la seconde partie et en réécrire une autre ? ça me permettrait de mettre une boucle for ou while sans tout refaire et recalculer à chaque fois...

    merci

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Pour avoir une aide efficace, la première chose à faire est de mettre un script minimaliste reproduisant le problème. Dans le tien l'indentation n'est pas bonne et les imports ne sont pas faits. Comme il n'y a pas de spécification d'encodage et que tu utilises des caractères non ascii dans tes commentaires, le script ne marche pas.

    A+

    Pfeuh

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 49
    Points : 50
    Points
    50
    Par défaut
    désolé.

    Alors codage en python. bibliothèque matplotlib.

    Le but est pas de faire tourner le code (il tourner déjà) mais plutôt de savoir s'il est possible de d’effacer le plot que crée la seconde parti pour en refaire un autre. En super simple le code donne:
    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
     
        import matplotlib.pyplot as plt
     
        fig=plt.figure()
        a1x = fig.add_subplot(111)
        a1x.hist(values,bins)    
        plt.legend()
     
        plt.xlabel("axe des x")
        a1x.set_ylabel("axe des y")
        plt.title(title)
     
        ax2 = a1x.twinx()
    #    ax2.plot(x, y)
        ax2.errorbar(x,y,yerr=var)
        ax2.set_ylabel('2e axe des y')
     
        plt.savefig(name_plot)

  4. #4
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par shadock0 Voir le message
    Le but est pas de faire tourner le code (il tourner déjà)
    Certes, mais pour te trouver une solution, on lance le script. Et en l'occurence, tel qu'il est là, il ne tourne toujours pas, pour des problèmes d'indentation visiblement. Une fois Le problème d'indentation corrigé, il ne tourne toujours pas parce que 'values' n'est pas défini. Du coup, on abandonne.

    A+

    Pfeuh

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/10/2014, 11h54
  2. Réponses: 8
    Dernier message: 18/04/2012, 14h35
  3. Réponses: 2
    Dernier message: 04/04/2012, 19h16
  4. Réponses: 15
    Dernier message: 24/01/2007, 12h54
  5. Réponses: 3
    Dernier message: 29/07/2003, 09h38

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