我在客户端上接收数据,我必须使用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()调用)但没有更新(程序似乎暂停,不要进入循环)。
有人可以帮忙吗?
答案 0 :(得分:1)
根据以下讨论进行更新:MarAja的原始代码正在运行,唯一的问题是轴限制没有更新,所以看起来好像情节没有更新。
从this示例,您似乎必须使用fig.canvas.draw()
重绘图表。另请注意,您必须设置适当的xlim
和ylim
来捕获整个数据系列,或者每一步更新它们(就像我在此示例中所做的那样):
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())