Python traçage en temps réel
Je l'acquisition de certaines données dans les deux tableaux: un pour le moment, et une pour la valeur. Quand j'arrive à 1000 points, je déclenchement d'un signal et le tracé de ces points (x=temps, y=valeur).
J'ai besoin de garder sur la même figure la précédente parcelles, mais seulement un nombre raisonnable pour éviter de ralentir le processus. Par exemple, je tiens à garder 10 000 points sur mon graphique.
Le matplotlib interactive de l'intrigue fonctionne bien, mais je ne sais pas comment faire pour effacer les premiers points et il ralentit mon ordinateur très rapidement.
J'ai regardé dans matplotlib.animation, mais il semble que pour répéter la même parcelle, et pas vraiment d'actualiser.
Je suis vraiment à la recherche d'une solution de lumière, afin d'éviter tout ralentissement.
Comme je l'acquérir pour une très grande quantité de temps, j'ai effacer les données d'entrée sur chaque boucle (la 1001st point est stocké dans la 1ère rangée et ainsi de suite).
Voici ce que j'ai pour le moment, mais il conserve tous les points sur le graphique:
import matplotlib.pyplot as plt
def init_plot():
plt.ion()
plt.figure()
plt.title("Test d\'acqusition", fontsize=20)
plt.xlabel("Temps(s)", fontsize=20)
plt.ylabel("Tension (V)", fontsize=20)
plt.grid(True)
def continuous_plot(x, fx, x2, fx2):
plt.plot(x, fx, 'bo', markersize=1)
plt.plot(x2, fx2, 'ro', markersize=1)
plt.draw()
J'ai appeler la fonction init fois, et le continous_plot est dans un processus, appelé à chaque fois que j'ai 1000 points dans mon tableau.
OriginalL'auteur CoMartel | 2014-07-16
Vous devez vous connecter pour publier un commentaire.
La solution la plus légère, vous pouvez remplacer les valeurs X et Y d'un graphe existant. (Ou de la valeur de Y seulement, si vos données X ne change pas. Un exemple simple:
Cette solution est assez rapide. La vitesse maximale du code ci-dessus est de 100 redessine par seconde (limitée par le
time.sleep
), j'obtiens environ 70-80, ce qui signifie qu'un nouveau dessin prend environ 4 ms. Mais YMMV selon le backend, etc.OriginalL'auteur DrV
Utiliser un tableau de taille fixe et de l'intrigue que l'utilisation de matplot.
Whenver vous ajoutez à l'ensemble qu'il va supprimer le premier élément.
OriginalL'auteur f.rodrigues
Je sais je suis en retard pour répondre à cette question, bt pour votre problème, vous pourriez regarder dans le "joystick". Il est basé sur la ligne.set_data() et de la toile.draw() les méthodes, avec une option d'axes de re-mise à l'échelle. Il permet aussi interactif d'enregistrement de texte ou d'image de traçage (en plus de l'affichage de graphiques).
Pas besoin de faire vos propres boucles dans un thread séparé, le package prend soin de lui, il suffit de donner la fréquence de mise à jour que vous souhaitez. En Plus de la console reste disponible pour plus de suivi des commandes.
Voir http://www.github.com/ceyzeriat/joystick/ ou https://pypi.python.org/pypi/joystick (utiliser pip install joystick à installer)
essayer:
OriginalL'auteur Guillaume S
Être totalement interactif, vous pouvez utiliser le Flou d'arrière plan pour cela. Concrètement, vous pouvez utiliser une mise à jour de la fonction qui est appelée toutes les X ms et diffuser les nouvelles données.
Il y a ici un fragment que j'utilise:
OriginalL'auteur Javier Guzman