2015-08-28 4 views
3

Я пытаюсь построить движение частиц с помощью pyplot. Проблема в том, что я не могу понять, как создать анимацию.Анимация ScatterPlot с PyPlot

Вот ноутбук: http://nbviewer.ipython.org/gist/lhk/949c7bf7007445033fd9

Очевидно, функция обновления не работает должным образом, но сообщение об ошибке слишком загадочным для меня. Что мне нужно изменить?

У вас есть хороший учебник по анимации с pyplot?

+0

Возможный дубликат [почему это заговор с Matplotlib так медленно?] (Http://stackoverflow.com/questions/8955869/why-is-plotting-with-matplotlib-so-slow) – soupault

+0

'FuncAnimation' принимает' fig 'как первый аргумент, а не' LineCollection'. Btw, поиск SO для статей по теме - их очень много. – soupault

ответ

3

Как комментарий @ s0upa1t, вы должны иметь фигуру в качестве первого аргумента для анимации. Критическая ошибка возникает из анимации, ожидающей объект fig, который имеет атрибут canvas, но вместо этого получает scatter, объект PathCollection, которого нет. В качестве примера минимальной анимации в форме вы хотите, рассмотрим,

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

dt = 0.005 
n=20 
L = 1 
particles=np.zeros(n,dtype=[("position", float , 2), 
          ("velocity", float ,2), 
          ("force", float ,2), 
          ("size", float , 1)]) 

particles["position"]=np.random.uniform(0,L,(n,2)); 
particles["velocity"]=np.zeros((n,2)); 
particles["size"]=0.5*np.ones(n); 

fig = plt.figure(figsize=(7,7)) 
ax = plt.axes(xlim=(0,L),ylim=(0,L)) 
scatter=ax.scatter(particles["position"][:,0], particles["position"][:,1]) 

def update(frame_number): 
    particles["force"]=np.random.uniform(-2,2.,(n,2)); 
    particles["velocity"] = particles["velocity"] + particles["force"]*dt 
    particles["position"] = particles["position"] + particles["velocity"]*dt 

    particles["position"] = particles["position"]%L 
    scatter.set_offsets(particles["position"]) 
    return scatter, 

anim = FuncAnimation(fig, update, interval=10) 
plt.show() 

Есть many хорошие анимации учебники, однако ответ here особенно приятно.

Смежные вопросы