无法使用 matplotlib 更新我的情节



我在客户端上接收数据,必须使用matplotlib动态绘制数据。我想不断更新我的情节。以下是我在一个简单的例子中尝试的内容:

import time
import numpy as np
import matplotlib.pyplot as plt
h, = plt.plot([], [])
plt.ion()
plt.show()
for i in range(0, 100):
    t = np.arange(i * 0.05, (i+1) * 0.05, 0.01)
    y = np.sin(2*np.pi*t)
    h.set_xdata(np.append(h.get_xdata(), t))
    h.set_ydata(np.append(h.get_ydata(), t))
    plt.draw()
    time.sleep(0.05)

但没有任何东西在绘图(无论是在python2.7还是3中),如果我取消了交互模式(ion())的激活,那么我会得到一个空的绘图(show()调用),但没有任何更新(程序似乎暂停了,不进入循环)。

有人能帮忙吗?

根据以下讨论进行更新:MarAja的原始代码正在工作,唯一的问题是轴限制没有更新,所以看起来绘图没有更新。


从这个例子中,您似乎必须使用fig.canvas.draw()重新绘制绘图。还要注意,您必须设置一个适当的xlimylim来捕获整个数据系列,或者每一步都更新它们(就像我在本例中所做的那样):

import time
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
h, = plt.plot([], [])
plt.ion()
plt.show() 
for i in range(0, 100):
    t = np.arange(i * 0.05, (i+1) * 0.05, 0.01)
    y = np.sin(2*np.pi*t)
    h.set_xdata(np.append(h.get_xdata(), t))
    h.set_ydata(np.append(h.get_ydata(), t))
    fig.canvas.draw()
    time.sleep(0.05)
    plt.xlim(0,h.get_xdata().max())
    plt.ylim(0,h.get_ydata().max())

最新更新