我正在学习使用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循环...?
哪个变量包含帧的索引?
非常感谢您的宝贵时间。周末愉快!
答案 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()