Kan du plotte live data i matplotlib?

Jeg læser data fra et stik i en tråd og ville gerne plot og opdatere plot som nye data ankommer. Jeg kodede en lille prototype til at simulere ting, men det virker ikke:

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 :(
stackoverflow.com/questions/14665636/…
stackoverflow.com/questions/8955869/…
stackoverflow.com/questions/11874767/…
Kig også ind i animation modul, som vil automatisere timere og tage sig af blitting for dig.

OriginalForfatteren nickponline | 2013-09-13

2 svar

  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()

    Hvis du ønsker at gå rigtig hurtigt, bør du kigge ind blitting.

    Jeg er også på udkig efter en måde at vise streaming-graf. Jeg har prøvet dette stykke kode, og fik “AttributeError: ‘modul’ objekt har ingen attribut ‘figur'”. Så prøvede jeg at “importere matplotlib.pylab som plt” i stedet for pylab og fik “+ RuntimeError: xdata og ydata skal være samme længde”. Noget galt med min miljøet? Jeg bruger Python 2.7
    Se redigeringer.
    Tak. Det ene er bedre…bare add “)” i ln.set_xdata(range(len(data))
    Drejning på interaktiv tilstand ville forårsage den figur, der ikke for at vise, når jeg kører scriptet fra kommandolinjen. Dette svar ved hjælp af matplotlib.animation virkede for mig: stackoverflow.com/questions/4098131/…
    Denne kode viser bare en tom grund på min laptop. Helt ny installation af Anaconda 3

    OriginalForfatteren tacaswell

  2. -1

    f.show() ikke blokere, og du kan bruge draw til at opdatere tallet.

    f = pylab.figure()
    f.show()
    while True:
        time.sleep(1)
        pylab.plot(data)
        pylab.draw()
    show er kun ikke-blokerende, hvis tilstanden interaktiv er på

    OriginalForfatteren mattexx

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *