我正在客户端接收数据,我必须使用 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 的原始代码正在运行,唯一的问题是轴限制没有更新,所以看起来绘图没有更新。
<小时/>来自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())
关于python - 无法使用 matplotlib 更新我的绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33676200/