如何使用matplotlib动画为数组选择设置动画?

时间:2018-10-26 13:24:44

标签: python animation matplotlib

我正在学习使用matplotlib动画功能。我从matplotlib中学习了本教程,并做了一些改动。到目前为止,我可以显示长度为10的完整数组(列表)。(请参见代码)

我的目标是仅在每个帧中看到同时来自数组的3个值。在下一帧中,“窗口”应以1索引的步长滑动,以便“旧”值向左移动,而在右边为“更多新”值:

第一帧-请参见数组中的值列表[3],列表[2],列表[1]

第二帧-请参见数组中的值列表[4],列表[3],列表[2]

第3帧-从数组中查看值列表[5],列表[4],列表[3]

....

matplotlib教程中的基本代码,仅作了一些修改即可显示我完整的数组(列表),但无需更新。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()
list = np.array([1,8,3,4,5,3,2,1,5,1])
line, = ax.plot(np.random.rand(10))
ax.set_ylim(0, 10)


def update(data):
    line.set_ydata(data)
    return line,

def data_gen():
    while True:
        #yield np.random.rand(4)
        yield list

ani = animation.FuncAnimation(fig, update, data_gen, interval=500)
plt.show()

我不知道如何“滑动”窗口然后更新动画。可能在我猜想的框架索引上有一个for循环...?

哪个变量包含帧的索引?

非常感谢您的宝贵时间。周末愉快!

1 个答案:

答案 0 :(得分:1)

我不知道您想用发电机做什么,但是我想这就是您要做什么?

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

point_to_show = 3
my_list = np.array([1,8,3,4,5,3,2,1,5,1])

fig, ax = plt.subplots()
line, = ax.plot(range(point_to_show),np.zeros(point_to_show)*np.NaN, 'ro-')
ax.set_ylim(0, 10)
ax.set_xlim(0, point_to_show-1)

def update(i):
    new_data = my_list[i:i+point_to_show]
    line.set_ydata(new_data)
    return line,

ani = animation.FuncAnimation(fig, update, frames=len(my_list)-point_to_show, interval=500)
plt.show()

enter image description here