使用Matplotlib绘制滚动窗口

时间:2018-03-19 13:57:24

标签: python matplotlib

我想在while循环中绘制一个时间序列作为滚动窗口:图表应始终显示最近的10个观察结果。

我的想法是使用deque objectmaxlen=10并在每一步中绘制它。 令我惊讶的是,情节新值附加到旧情节中;显然它记得在双端队列中不再存在的价值!为什么这样,我怎么能把它关掉?

enter image description here

这是我想要做的最小例子。绘图部分基于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的动画功能,但无法弄清楚如何在无限循环中做到这一点......

1 个答案:

答案 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()