首页 > 解决方案 > FuncAnimation:使用列表更新位置

问题描述

我想运行一个程序,它接受一个和零的列表(my_list),根据更新函数更新它,然后使用 FuncAnimation 动画这个过程。我有以下代码,它创建列表、列表项的矩形补丁(红色矩形表示一,黑色表示零)和更新算法。但是,我不确定如何在我的动画函数中为补丁设置动画。

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation


def init():
    return patches


def update(my_list):
    list_update = [0]*len(my_list)
    for i, value in enumerate(my_list):
        if i < len(my_list)-1:
            if value == 1 and my_list[i+1] == 0:
                list_update[i] = 0
                list_update[i+1] = 1
            elif value == 1 and my_list[i+1] == 1:
                list_update[i] = 1
        else:
            if value == 1 and my_list[0] == 0:
                list_update[i] = 0
                list_update[0] = 1
            elif value == 1 and my_list[0] == 1:
                list_update[i] = 1

    my_list = list_update
    return my_list


def animate(i):
    update(my_list)
    # code to update patches


my_list = [0, 0, 1, 1, 0, 1, 1, 1, 1, 0]

plt.style.use('dark_background')
fig = plt.figure()
ax = plt.axes()

ax.axis('scaled')
ax.set_xlim(0, len(my_list))

patches = []

for i, value in enumerate(my_list):
    if value == 1:
        patches.append(plt.Rectangle((i, 0), 0.9, 1, angle=0.0,
                                     facecolor='r', edgecolor='w',
                                     linewidth='2.0',
                                     animated=True))
    else:
        patches.append(plt.Rectangle((i, 0), 1, 1, angle=0.0,
                                      facecolor='k',
                                      edgecolor='k',
                                      animated=True))

anim = FuncAnimation(fig, animate, frames=10,
                      init_func=init, repeat=False, interval=50, blit=True)
plt.show()

标签: pythonmatplotlibanimation

解决方案


推荐阅读