使用matplotlib在python3中为多个形状设置动画

时间:2017-01-12 09:35:54

标签: python python-3.x animation matplotlib

尝试使用matplotlib动画函数在python3中一次动画多个对象。

下面写的代码是我到目前为止的地方。我能够创建多个对象并在图中显示它们。我通过使用包含矩形的补丁函数的for循环来完成此操作。从这里开始,我希望通过使用动画功能将所有单个矩形移动一定量。

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

fig = plt.figure()
ax = fig.add_subplot(111)

plt.xlim(-100, 100)
plt.ylim(-100, 100)

width = 5
bars = 25

RB = [] # Establish RB as a Python list
for a in range(bars):
    RB.append(patches.Rectangle((a*15-140,-100), width, 200, 
          color="blue", alpha=0.50))

def init():
    for a in range(bars):
        ax.add_patch(RB[a])
    return RB

def animate(i):
    for a in range(bars):
        temp = np.array(RB[i].get_xy())   
        temp[0] = temp[0] + 3;
        RB[i].set_XY = temp
    return RB

anim = animation.FuncAnimation(fig, animate, 
                           init_func=init, 
                           frames=15, 
                           interval=20,
                           blit=True)

plt.show()

目前,运行代码后没有任何动作或发生。我试图按照python网站上的例子进行操作;但它通常会导致属性错误:'列表'对象没有属性' set_animated''。

2 个答案:

答案 0 :(得分:1)

你必须使用

 RB[i].set_xy(temp)

而不是set_XY = temp

答案 1 :(得分:0)

RB中的索引实际上是错误的。您应该将animate函数更改为:

def animate(i):
    for a in range(bars):
        temp = RB[a].get_x() + 3
        RB[a].set_x(temp)
    return RB