Estoy leyendo los datos de una toma de corriente en un hilo y me gustaría parcela y actualización de la trama como de los nuevos que llegan los datos. Lo programé un pequeño prototipo para simular cosas pero no funciona:

import pylab
import time
import threading
import random

data = []

# This just simulates reading from a socket.
def data_listener():
    while True:
        time.sleep(1)
        data.append(random.random())

if __name__ == '__main__':
    thread = threading.Thread(target=data_listener)
    thread.daemon = True
    thread.start()

    pylab.figure()

    while True:
        time.sleep(1)
        pylab.plot(data)
        pylab.show() # This blocks :(
InformationsquelleAutor nickponline | 2013-09-13

2 Comentarios

  1. 10
    import matplotlib.pyplot as plt
    import time
    import threading
    import random
    
    data = []
    
    # This just simulates reading from a socket.
    def data_listener():
        while True:
            time.sleep(1)
            data.append(random.random())
    
    if __name__ == '__main__':
        thread = threading.Thread(target=data_listener)
        thread.daemon = True
        thread.start()
        #
        # initialize figure
        plt.figure() 
        ln, = plt.plot([])
        plt.ion()
        plt.show()
        while True:
            plt.pause(1)
            ln.set_xdata(range(len(data)))
            ln.set_ydata(data)
            plt.draw()

    Si quieres ir realmente rápido, usted debe mirar en la fusión.

    • También estoy buscando una forma de mostrar gráfico de flujo. He probado este trozo de código y tiene «AttributeError: ‘módulo’ el objeto no tiene ningún atributo ‘figura'». Entonces traté de «importar matplotlib.pylab como plt» en lugar de pylab y obtuvo «RuntimeError: xdata y ydata debe ser la longitud de la misma». Algo mal con mi entorno? Estoy usando Python 2.7
    • Ver ediciones.
    • Gracias. Este es el mejor…solo hay que añadir «)» en ln.set_xdata(range(len(datos))
    • Gracias, agrega la falta )
    • De inflexión en el modo interactivo haría que la figura no se muestran cuando ejecuto el script desde la línea de comandos. Esta respuesta usando matplotlib.animation trabajado para mí: stackoverflow.com/questions/4098131/…
    • Este código sólo muestra un gráfico en blanco en mi portátil. Instalación nueva de Anaconda 3

  2. -1

    f.show() no cuadra, y usted puede utilizar draw a la actualización de la figura.

    f = pylab.figure()
    f.show()
    while True:
        time.sleep(1)
        pylab.plot(data)
        pylab.draw()
    • show es sólo la no-bloqueo si el modo interactivo en

Dejar respuesta

Please enter your comment!
Please enter your name here