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

Calcul scientifique Python Discussion :

[matplotlib] affichage dynamique


Sujet :

Calcul scientifique Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 15
    Par défaut [matplotlib] affichage dynamique
    Salut,

    Je cherche à tracer une courbe en temps réel avec matplotlib.

    J'ai vu comment actualiser les données déjà existantes sur un graph grâce à l'exemple http://matplotlib.sourceforge.net/examples/anim.py

    Mon problème est que mon programme va tourner pendant un temps indéfini. Je ne connais donc pas à l'avance la taille de mon axe x. Et je n'ai pas trouvé comment "l'agrandir" ...

    En gros je cherche à faire un graphe un peu comme dans les xTorrent lorsqu'on regarde l'évolution de la vitesse de download, actualisé toutes les x secondes.

    Merci,
    Stéphane

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Il y a ce système dans certains outils d'optimisation. Il me semble qu'un plot() est appelé à chaque itération, mais je n'en sais pas plus

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 15
    Par défaut
    Hum oki ...
    Peut-être est-ce plus facile à faire avec une autre bibliothèque ?? Je suis ouvert à toutes propositions :-)

    Merci !
    Stéphane

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 15
    Par défaut
    Pour info j'ai finalement fait ça avec un timer tout con et plot()
    Ca donne qqchose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while(run == 1):
        update()
        time.sleep(delay)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        def update(self):
            self.figure.clf()
     
            graph = self.figure.add_subplot(111)
     
            for i in self.dataList:
                values = self.datasValues.get(i)
                if values != None:
                    graph.plot(values)
                    graph.grid(True)
     
            graph.legend(self.dataList, prop = FontProperties(size='smaller'))
     
            self.canvas.show()
    Si ça peut en aider certains ...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Par défaut
    Chez moi, l'instruction show() est bloquante ...
    Ce qui fait qu'a partir du moment ou je fait un show(), plus aucune instruction ne s'exécute ... jusqu'à ce que je ferme la fenêtre.

    Tu n'as pas eut ce problème?

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est normal, ça. Il faut que tu passes en mode interactif pour que ça marche.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Par défaut
    Exact! j'avais oublié cette instruction !

    Autre petite question, actuellement, pour faire l'affichage, j'ecrit tout simplement draw().

    Mais sur quel objet cette méthode est-elle appliquée?

    Thomas

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Sur l'axe courant, il me semble. A vérifier.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Par défaut
    C'est apparement ça oui.

    Mais avec le code suivant, j'obtiens toujours une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    from matplotlib.pylab import setp, text, figure, figlegend, show, draw, ion, plot
    from numpy import arange, pi, sin
     
    fig = figure()
    ax = fig.add_subplot(111)
    ax.axis((-2.0, 2.0, -2.0, 2.0))
    x = arange(0,2*pi,0.01)
    line, = ax.plot(x,sin(x))
    ion()
    ax.draw()
    ça me donne l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    raise RuntimeError('No render defined')
    Qu'est ce que je doit faire ?!?

    ps : au passage, j'utilise matplotlib pour faire du monitoring. N'y as t-il pas une librairie plus adapté?

  10. #10
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Tu ne donnes pas assez d'infos pour qu'on puisse dire quoique ce soit

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Par défaut
    Selon l'erreur, j'ai l'impression que je dois définir un contexte de rendu (du style gtk, qt, ...).

    Mais je ne sais pas comment on doit le faire !

    Tu ne donnes pas assez d'infos pour qu'on puisse dire quoique ce soit
    Si tu parles du monitoring, je peux détailler. Si c'est par rapport au code source, je peux pas en mettre en plus, c'est tout ce que j'ai !

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Le traceback complet ?

    Au passage, tu devrais utiliser juste pyplot

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Le traceback complet ?
    Oui, ça doit être ça. Mais je sait pas comment on fait

    Citation Envoyé par Matthieu Brucher Voir le message
    Au passage, tu devrais utiliser juste pyplot
    Oui c'est ce que je suis en train de me dire, pyplot ou même gnuplot-py

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Ah non, pas gnuplot ! C'ets moche, affreux, horrible, ...
    pyplot, c'est juste pylab sans la couche de compatibilité numarray, avec des anciennes significations de fonction, ce qui fait qu'on se plante régulièrement entre les fonctions numpy et pylab.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Par défaut
    C'est clair que c'est hideux !!!

    Il y a un mec qui a écrit un terminal avec de l'antialiasing. Ca à l'air pas mal, mais c'est sur le cvs ...

    http://tipote.free.fr/wxt19.png

    Je regarde vers pyplot alors !

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Par défaut
    pyplot à l'ai moche aussi non ?

    De toute façon, les 2 servent a piloter gnuplot non ?!?

  17. #17
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Non... pyplot, c'est le sous-module de matplotlib qui n'importe que la partie graphique et pas le reste.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Par défaut
    J'ai telecharger pyplot içi :
    http://sourceforge.net/projects/pyplot/

    Sur ce site, c'est écrit que c'est compatible uniquement avec linux.
    Autre chose, ce petit outil est en fait une interface graphique, comment l'utiliser dans un script ?!?

    A moins que ce ne soit pas le bon pyplot ...
    Peut etre faut-il faire import matplotlib.pyplot, tout simplement !

  19. #19
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Relis mon précédent post stp... Je ne parle pas de ce pyplot là.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Par défaut
    Oui, tu as raison.

    J'ai donc fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import matplotlib.pyplot as plt
    parce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import matplotlib.pylab as plb
    me retourne une erreur

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème d'affichage dynamique d'une liste
    Par bor1s dans le forum ASP
    Réponses: 2
    Dernier message: 18/11/2005, 16h18
  2. Probleme d'affichage dynamique de ma base
    Par kudawoo2002 dans le forum ASP
    Réponses: 3
    Dernier message: 18/11/2005, 09h22
  3. Réponses: 1
    Dernier message: 08/07/2005, 02h46
  4. [VB.NET] - affichage dynamique dans un tableau
    Par karibouxe dans le forum ASP.NET
    Réponses: 8
    Dernier message: 20/06/2005, 15h07
  5. affichage dynamique en fonction des données en base
    Par jengo dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/10/2004, 10h22

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