Я новичок в matplotlib, и я пытаюсь понять, как работает анимация.pyplot прямоугольник анимация оставляет исходный прямоугольник отображается
Я написал следующий код Python для перемещения вокруг прямоугольника:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
class AnimRect(object):
'''Animate a rectangle'''
def __init__(self):
self.fig = plt.figure(figsize = (5,5))
# create the axes
self.ax = plt.axes(xlim=(0,100), ylim=(0,100), aspect='equal')
# create rectangle
self.rect = plt.Rectangle((70,20), 10, 10,
fill=True, color='gold', ec='blue')
self.ax.add_patch(self.rect)
# initialization function
def init(self):
self.rect.set_xy((10.0, 10.0))
return self.rect,
# animation function
def animate(self, i):
self.rect.set_xy((i,i))
return self.rect,
def call_animation(self):
# call the animator function
animation.FuncAnimation(self.fig, self.animate, frames=91,
init_func= self.init,
interval=20, blit=True, repeat=False)
plt.show()
def main():
rect = AnimRect()
rect.call_animation()
main()
Когда я запускаю код, прямоугольник, который был установлен в исходное положение (10.0,10.0) всегда остается на экране, в то время как анимированный прямоугольник ведет себя так, как ожидалось. Я не могу понять, почему. Я попробовал несколько незначительных изменений, но не смог найти решение. Что я делаю не так?
Это решило проблему. Решение с помощью метода init работает со мной (Anaconda Python 3.4 для Windows) с blit либо True, либо False. Второе решение требует, чтобы blit был установлен в False. – JFC
Хорошо, рад, что я мог бы помочь. Я думаю, что 'blit' должен быть установлен в False во втором случае, потому что' blit' должен сначала «удалить» измененные элементы; в отсутствие метода 'init' нет элемента для удаления, и он выдает ошибку. –