我想在while
循环中绘制一个时间序列作为滚动窗口:图表应始终显示最近的10个观察结果。
我的想法是使用deque object和maxlen=10
并在每一步中绘制它。
令我惊讶的是,情节将新值附加到旧情节中;显然它记得在双端队列中不再存在的价值!为什么这样,我怎么能把它关掉?
这是我想要做的最小例子。绘图部分基于this post(虽然plt.ion()
并没有为我改变任何内容,所以我把它留了出来):
from collections import deque
import matplotlib.pyplot as plt
import numpy as np
x = 0
data = deque(maxlen=10)
while True:
x += np.abs(np.random.randn())
y = np.random.randn()
data.append((x, y))
plt.plot(*zip(*data), c='black')
plt.pause(0.1)
我也尝试使用Matplotlib的动画功能,但无法弄清楚如何在无限循环中做到这一点......
答案 0 :(得分:3)
如今,使用the animation
module比使用plt.plot
多次调用更容易(并提供更好的性能):
from collections import deque
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
def animate(i):
global x
x += np.abs(np.random.randn())
y = np.random.randn()
data.append((x, y))
ax.relim()
ax.autoscale_view()
line.set_data(*zip(*data))
fig, ax = plt.subplots()
x = 0
y = np.random.randn()
data = deque([(x, y)], maxlen=10)
line, = plt.plot(*zip(*data), c='black')
ani = animation.FuncAnimation(fig, animate, interval=100)
plt.show()