Ich weiß, dass ich zu spät bin, um diese Frage zu beantworten, aber für Ihr Problem könnten Sie sich das "Joystick" -Paket ansehen. Ich habe es zum Plotten eines Datenstroms von der seriellen Schnittstelle entwickelt, aber es funktioniert für jeden Stream. Es ermöglicht auch die interaktive Textprotokollierung oder Bilddarstellung (zusätzlich zur grafischen Darstellung). Sie müssen keine eigenen Schleifen in einem separaten Thread erstellen, das Paket kümmert sich darum. Geben Sie einfach die gewünschte Aktualisierungshäufigkeit an. Außerdem bleibt das Terminal für die Überwachung von Befehlen während des Plots verfügbar. Siehe http://www.github.com/ceyzeriat/joystick/ oder https://pypi.python.org/pypi/joystick (verwenden Sie den Pip-Installations-Joystick zur Installation).
Ersetzen Sie einfach np.random.random () durch Ihren realen Datenpunkt, der von der seriellen Schnittstelle im folgenden Code gelesen wird:
import joystick as jk
import numpy as np
import time
class test(jk.Joystick):
# initialize the infinite loop decorator
_infinite_loop = jk.deco_infinite_loop()
def _init(self, *args, **kwargs):
"""
Function called at initialization, see the doc
"""
self._t0 = time.time() # initialize time
self.xdata = np.array([self._t0]) # time x-axis
self.ydata = np.array([0.0]) # fake data y-axis
# create a graph frame
self.mygraph = self.add_frame(jk.Graph(name="test", size=(500, 500), pos=(50, 50), fmt="go-", xnpts=10000, xnptsmax=10000, xylim=(None, None, 0, 1)))
@_infinite_loop(wait_time=0.2)
def _generate_data(self): # function looped every 0.2 second to read or produce data
"""
Loop starting with the simulation start, getting data and
pushing it to the graph every 0.2 seconds
"""
# concatenate data on the time x-axis
self.xdata = jk.core.add_datapoint(self.xdata, time.time(), xnptsmax=self.mygraph.xnptsmax)
# concatenate data on the fake data y-axis
self.ydata = jk.core.add_datapoint(self.ydata, np.random.random(), xnptsmax=self.mygraph.xnptsmax)
self.mygraph.set_xydata(t, self.ydata)
t = test()
t.start()
t.stop()