Я пытался кодировать анимацию с помощью matplolibs FuncAnimation для создания модели, такой как изображение ниже, где каждый кадр круга меняет цвет от белого до серого и наоборот , Картина:TypeError: объект «NoneType» не является итерируемой ошибкой в анимации matoplotlib
Ниже приведен код. Рассмотрим h как список, содержащий отдельные списки, первый содержит круг для изменения в каждом кадре, а второй - начальные цвета кругов в виде отдельных строк «k» и «w». Пример для ч:
[[1,3,4,1.....]['k','w','k','w','w'....]]
Код:
n=5
fig = plt.figure(figsize=(n,n))
x =[i%n+1 for i in range(0,n**2)]
y =[i/n+1 for i in range(n**2)]
h=giving_data_for_visual(2,n,3,1,2)
cl=h[1]
colors=''
for i in cl:
colors+=i
changes_list=h[0]
scat=plt.scatter(x, y,s=50,facecolors=colors, alpha=0.5)
def update(frame):
global colors,change_list
t=(cl[changes_list[frame]]=='k')
cl[changes_list[frame]]='k' if t else 'w'
colors=cl
scat.set_facecolors(colors)
ani=animation.FuncAnimation(fig, update, interval=10, blit=True,frames=len(changes_list))
plt.show()
Импорт используется следующим образом (некоторые из них не предназначены для этой части программы):
from random import randint
from random import uniform
from math import exp
from math import log
import matplotlib.pyplot as plt
import numpy as np
from numpy import std
from matplotlib import animation
Однако, когда я запускаю код, появляется только первый кадр (что-то похожее на модель i, выложенное выше), и когда я закрываю его окно, появляется такая ошибка:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Yael\Desktop\WinPython-64bit-2.7.10.2\python-2.7.10.amd64\lib\lib-tk\Tkinter.py", line 1536, in __call__
return self.func(*args)
File "C:\Users\Yael\Desktop\WinPython-64bit-2.7.10.2\python-2.7.10.amd64\lib\lib-tk\Tkinter.py", line 587, in callit
func(*args)
File "C:\Users\Yael\Desktop\WinPython-64bit-2.7.10.2\python-2.7.10.amd64\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 143, in _on_timer
TimerBase._on_timer(self)
File "C:\Users\Yael\Desktop\WinPython-64bit-2.7.10.2\python-2.7.10.amd64\lib\site-packages\matplotlib\backend_bases.py", line 1290, in _on_timer
ret = func(*args, **kwargs)
File "C:\Users\Yael\Desktop\WinPython-64bit-2.7.10.2\python-2.7.10.amd64\lib\site-packages\matplotlib\animation.py", line 925, in _step
still_going = Animation._step(self, *args)
File "C:\Users\Yael\Desktop\WinPython-64bit-2.7.10.2\python-2.7.10.amd64\lib\site-packages\matplotlib\animation.py", line 784, in _step
self._draw_next_frame(framedata, self._blit)
File "C:\Users\Yael\Desktop\WinPython-64bit-2.7.10.2\python-2.7.10.amd64\lib\site-packages\matplotlib\animation.py", line 802, in _draw_next_frame
self._pre_draw(framedata, blit)
File "C:\Users\Yael\Desktop\WinPython-64bit-2.7.10.2\python-2.7.10.amd64\lib\site-packages\matplotlib\animation.py", line 815, in _pre_draw
self._blit_clear(self._drawn_artists, self._blit_cache)
File "C:\Users\Yael\Desktop\WinPython-64bit-2.7.10.2\python-2.7.10.amd64\lib\site-packages\matplotlib\animation.py", line 853, in _blit_clear
axes = set(a.axes for a in artists)
TypeError: 'NoneType' object is not iterable
Я не могу решить эту ошибку. Заранее благодарю за любую помощь :).
спасибо. Теперь я чувствую себя ужасно глупым из-за отсутствия возвращения. – nyenyu
Ну, не ясно, что функция должна что-то вернуть. –