Python 能否在matplotlib中绘制实时数据?

Python 能否在matplotlib中绘制实时数据?,python,matplotlib,Python,Matplotlib,我正在一个线程中从套接字读取数据,并希望在新数据到达时绘制和更新绘图。我编写了一个小型原型来模拟事物,但它不起作用: 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

我正在一个线程中从套接字读取数据,并希望在新数据到达时绘制和更新绘图。我编写了一个小型原型来模拟事物,但它不起作用:

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 :(
f.show()
不会阻塞,您可以使用
draw
更新图形

f = pylab.figure()
f.show()
while True:
    time.sleep(1)
    pylab.plot(data)
    pylab.draw()

如果你想走得很快,你应该看看blitting。

还可以看看
动画
模块,该模块将自动计时并为你处理blitting。我还在寻找一种显示流图的方法。我尝试了这段代码,得到了“AttributeError:‘module’object没有属性‘figure’”。然后我尝试“将matplotlib.pylab作为plt导入”而不是pylab,结果得到“RuntimeError:xdata和ydata必须具有相同的长度”。我的环境有问题吗?我正在使用Python 2.7,谢谢。这一个更好…只需在ln.set_xdata(range(len(data))@GregDan谢谢,添加了缺少的)处添加“)”,打开交互模式将导致在从命令行运行脚本时图形不显示。这个使用
matplotlib.animation
的答案对我很有用:这个代码只是在我的笔记本电脑上显示了一个空白的绘图。全新安装的Anaconda 3
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()