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 :

Python 2.7 et Matplotlib


Sujet :

Python

  1. #1
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut Python 2.7 et Matplotlib
    Bonjour,

    Je suis un gros débutant en python et je tourne en rond à essayer de résoudre mon problème, qui doit pourtant être simple.
    J'ai un fichier texte contenant des données (un float par ligne). Ces lignes sont incrémentées au fil du temps par un script python qui les génère (env. toutes les minutes).
    Je cherche à tracer une courbe représentant ces valeurs, courbe devant être rafraichie à chaque nouvelle ligne du fichier texte.

    J'ai trouvé des exemples avec la fonction scatter, j'ai tenté d'adapter mais scatter affiche des points et je ne vois pas comment faire ma boucle.
    J'ai trouvé des exemples avec matplotlib.animation (FuncAnimation) mais celle-ci attend un intervalle de temps comme paramètre.

    Bref, je tourne en rond et je ne vois pas comment prendre le bon côté.

    Auriez-vous SVP une petite idée ?

    D'avance merci beaucoup.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 679
    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 679
    Par défaut
    Salut,

    Citation Envoyé par windo31 Voir le message
    J'ai trouvé des exemples avec matplotlib.animation (FuncAnimation) mais celle-ci attend un intervalle de temps comme paramètre.
    Si votre fichier est mis à jour toutes les minutes, toutes les 30s. vous allez regarder s'il y a de nouvelles données et vous mettez à jour l'affichage.

    Bref, je tourne en rond et je ne vois pas comment prendre le bon côté.
    Avec matplotlib, vous avez une tripotée d'exemples qui viennent avec la documentation. Il suffit d'en chercher un qui ressemble un peu à ce que vous voulez faire et l'adapter. Dans votre cas, peut être que l’oscilloscope pourrait être un point de départ... sinon aller faire votre marché dans les différentes animations proposées.

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

  3. #3
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut
    Merci de la réponse rapide.
    En fait, à force de chercher et d'adapter..., j'ai fini par trouver !

    j'utilise donc la fonction matplotlib.animation (FuncAnimation) en mettant un intervale de 30sec.
    la fonction update qui est appelée va lire le fichier ligne par ligne, et si la ligne est non vide, va mettre à jour les données. Ca fonctionne !
    Les exemples ont été tirés d'ici :
    https://stackoverflow.com/questions/...ing-matplotlib

    Voici mon code si ça peut servir :
    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
    # -*- coding: utf-8 -*-
     
    # https://stackoverflow.com/questions/11874767/how-do-i-plot-in-real-time-in-a-while-loop-using-matplotlib
    from datetime import datetime
    from matplotlib import pyplot
    from matplotlib.animation import FuncAnimation
    from random import randrange
     
    refreshRate=1000
     
    x_data, y_data = [], []
     
    figure = pyplot.figure()
    line, = pyplot.plot_date(x_data, y_data, '-')
    pyplot.title('Power Max (dB)')
    pyplot.grid(True)
    counter=1
    max=0
     
    def update(frame):
    	global counter
    	global max
    	with open("maxPower.txt", "r") as fichier:
    		for i in range(counter):
    			power = fichier.readline()
    	if (power!=""):
    		if (power>max):
    			max=power
    		x_data.append(datetime.now())
    		# x_data.append(counter)
    		y_data.append(float(power))
    		counter=counter+1
    		line.set_data(x_data, y_data)
    		figure.gca().relim()
    		figure.gca().autoscale_view()
    		return line,
     
    animation = FuncAnimation(figure, update, interval=refreshRate)
     
    pyplot.show()
    Par contre, j'aurias préféré avoir en abscisses un numéro d'échantillon au lieu de l'heure mais je n'y parviens pas (d'ou la ligne commentée)

    Merci encore.
    Cdlt.

Discussions similaires

  1. [Python 2.X] PB Python, Gtk, Glade et matplotlib
    Par TVALETTE dans le forum Général Python
    Réponses: 9
    Dernier message: 17/12/2017, 19h26
  2. Python 2.7 et matplotlib
    Par Bayard dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 02/11/2010, 20h58
  3. problème avec Python, matplotlib et pygtk
    Par marwanos dans le forum Déploiement/Installation
    Réponses: 11
    Dernier message: 27/04/2010, 00h29
  4. Histogramme Python Matplotlib
    Par Dazdh dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 13/05/2008, 11h57
  5. Probleme python 2.4 et matplotlib : unicode encode error
    Par patfrat dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 12/06/2005, 00h30

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