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