Функция оживления возвращает только один кадр

#python #animation #random-walk

Вопрос:

Я пытаюсь отобразить случайное блуждание для популяции и показать его в анимации, однако функция FuncAnimation, похоже, не проходит первый кадр, хотя она обращается к функции animate, поскольку кадр отображается в spyder.

Анимация должна прекратиться, когда все население (Npop) будет иметь Bool=1 или когда t достигнет 250

 step_set = (-1, 0, 1)
    
def animate(t):
    global NpopCol,NpopA, NpopB, Npop,path, step,step_set,Bool, direction
    print(t)
    for i in range(0,Npop):
        path[i] =step[i]          
        direction =np.random.choice(step_set,2)
        for j in range(0,Npop):
            if(Bool[j]==1):
                if(path[j][0]==path[i][0])amp;(path[j][1]==path[i][1]):
                        Bool[i]=1 
        ##generate a path, moving 1 square right/left , up/down / diagonally
        step[i]=step[i]  direction
    NpopCol=[]
    for i in range (0,Npop):
        if(Bool[i]==1):  
            NpopCol.append('r')
        if(Bool[i]==0)  amp;(i<NpopA)   : 
            NpopCol.append('b')
        if(Bool[i]==0)  amp;(i>=NpopA)   : 
            NpopCol.append('g')
    
    if (sum(Bool)==Npop) or t>250:
        anim.event_source.stop()
    ##t=t 1
    scat.set_offsets(path)   
    scat.set_color(NpopCol)     
    return scat,path
     

fig , ax=plt.subplots()
scat=plt.scatter(path[:,0], path[:,1],c=NpopCol,s=10)
anim=FuncAnimation(fig,animate,interval=10)
plt.show()
 

Выше приведен код, который я использую, любая помощь в этом вопросе будет весьма признательна.

заранее спасибо!

Ответ №1:

Я выяснил, что что-то было не так со Spyder во время его запуска (возможно, какая-то настройка, которую я установил ранее, или некоторые конфликтующие библиотеки). Мой коллега также запустил тот же код, и это сработало для него.

Я попробовал тот же код в Google Colab, и он сработал! Если у вас та же проблема, я бы предложил запустить ее в другой среде.