ОК, я немного изменил этот пример (который использует UpdatablePatchCollection
), и теперь он работает.
Вот рабочий минимальный пример:
%matplotlib notebook # Use this on Jupyter Notebooks
import matplotlib.collections as mcollections
import matplotlib.pyplot as plt
import matplotlib as mpl
import time
class UpdatablePatchCollection(mcollections.PatchCollection):
def __init__(self, patches, *args, **kwargs):
self.patches = patches
mcollections.PatchCollection.__init__(self, patches, *args, **kwargs)
def get_paths(self):
self.set_paths(self.patches)
return self._paths
plt.ion()
rect = mpl.patches.Rectangle((0,0),1,1)
collection = UpdatablePatchCollection([rect])
fig, ax = plt.subplots()
ax.set_xlim(0,5)
ax.set_ylim(0,3)
ax.add_artist(collection)
def update_plot(i):
rect.set_xy((i,1))
fig.canvas.draw()
fig.canvas.flush_events()
for i in range(5):
time.sleep(0.5)
update_plot(i)
Эта часть важна для " рендеринга " каждого кадра.
fig.canvas.draw()
fig.canvas.flush_events()
И обратите внимание на важный plt.ion()
звонок. Без этого сюжет не будет интерактивно анимировать изменения в коллекции патчей.