我正在编写一个应用程序,显示动态变化的数据(从套接字读取的数据)。
作为一个虚拟的例子,我试图画出一个振幅乘以每秒1.1的正弦:import numpy as np
import matplotlib.pyplot as plt
import time
x = np.arange(0, 10, 0.1);
y = np.sin(x)
for i in xrange(100):
plt.plot(x, y)
time.sleep(1)
y=y*1.1
这显然不是办法,但它表明了我的意图。
怎样才能正确地完成呢?
编辑:
以下是@mskimm answer中建议的代码的回溯输出:plt.show() #Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 505, in run
self.__target(*self.__args, **self.__kwargs)
File "", line 7, in update
plt.draw()
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 466, in draw
get_current_fig_manager().canvas.draw()
File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 240, in draw
tkagg.blit(self._tkphoto, self.renderer._renderer, colormode=2)
File "/usr/lib/pymodules/python2.7/matplotlib/backends/tkagg.py", line 12, in blit
tk.call("PyAggImagePhoto", photoimage, id(aggimage), colormode, id(bbox_array))
RuntimeError: main thread is not in main loop
编辑2:
原来,在qtconsole中运行时,同样的代码也可以工作。。。(知道为什么吗?)
然而,每次打印都要重新缩放到绘图,所以“动画效果”就不见了。
我试着用plt.autoscale_view(False,False,False)但是那根本没有什么效果。