Seite 1 von 1

matplotlib in echtzeit

Verfasst: Montag 19. Juli 2010, 16:57
von Pretender2k
tach zusammen,

ich moechte gerne matplotlib in echtzeit benutzen. Mit "echtzeit" meine ich, dass ich jede sec. einen Wert aus einer txt file lese und diesen gerne in einen Grafen plotten moechte. Die Y-Achse des Grafens sollte fest sein und die X- Achse immer die letzten 20 sec anzeigen. Die Geschwindigkeit sollte eigentlich kein Problem sein.

Ich hab folgenden Code geschrieben:

Code: Alles auswählen

from matplotlib.pyplot import figure, plot, show, close, draw, axis
from time import sleep

t = 0
a = 0
figure(1)
show()
while (1):
	t = t+1
	filename = "test.txt"
	txtfile = open(filename, "r")
	CO2 = float(txtfile.read())
	print CO2
	
	
	plot(t,CO2,"ro")
	if (t>5):
		a = a+1
	axis([0+a,20+a,300,500])
	
	draw()
	sleep(1)	


Das Problem ist jetzt, dass wenn ich irgendwas ueber das figure fenster schiebe, dieses nichtmehr richtig angezeigt wird. Ich glaub ich mach das acuh net so wirklich richtig. Vorschlaege was man besser machen sollte?

Danke

Re: matplotlib in echtzeit

Verfasst: Dienstag 20. Juli 2010, 13:47
von Pretender2k
keiner ne idee? bzw. schonmal gemacht?

Re: matplotlib in echtzeit

Verfasst: Dienstag 20. Juli 2010, 14:12
von Darii
Könnte mir vorstellen, dass das recht ineffizient ist was du da machst. Afaik fügt plot immer ein neues Linien-Objekt zum Bild hinzu bei deiner Endlosschleife werden das irgendwann recht viele. Also entweder das Bild vorher komplett löschen besser den neuen Datenpunkt manuell hinzufügen und redraw anstoßen. Bei der Gelegenheit würde ich mir auch gleich Gedanken machen die alten Datenpunkte irgendwann zu löschen, damit das nicht zu viele werden.

Re: matplotlib in echtzeit

Verfasst: Dienstag 20. Juli 2010, 16:16
von ms4py
Schau mal hier: http://www.scipy.org/Cookbook/Matplotlib/Animations

BTW: Textdateien öffnet man mit `with` oder `try..finally`!