Я пытаюсь создать анимированный график разброса сети, которую я написал. Это дает мне ошибки формы в заголовке, что не имеет смысла, потому что (2,3) - это именно та форма, которая необходима для цветовой последовательности RGB на точечной диаграмме с двумя точками. Что странно, иногда программа работает просто отлично. Я запускаю его один раз, он работает (по крайней мере, эту часть), запускаю его снова, и я получаю бессмысленную ошибку. Вот функция, вызывающая проблему:
def update_plot(self, i, Network, scat):
network = next(self._stream)
x = [group._pos[0] for group in network._groups]
y = [group._pos[1] for group in network._groups ]
s = [group._population*10 for group in network._groups]
d = array([group._percents for group in network._groups])
c = array([group._percents for group in self._initNetwork._groups])
print('colors', c)
scat = plt.scatter(x, y, c=d, s=s)
return scat
Не важно, что именно. Каждая «группа» в сети является узлом, и цвет узла зависит от «процентов» этой группы.
Вот вывод:
('colors', array([[ 0.38678978, 0.23654735, 0.37666288],
[ 0.03213068, 0.48379012, 0.4840792 ]]))
('colors', array([[ 0.38678978, 0.23654735, 0.37666288],
[ 0.03213068, 0.48379012, 0.4840792 ]]))
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1550, in __call__
return self.func(*args)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 599, in callit
func(*args)
File "/usr/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 95, in _on_timer
TimerBase._on_timer(self)
File "/usr/lib/python2.7/dist-packages/matplotlib/backend_bases.py", line 1383, in _on_timer
ret = func(*args, **kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/animation.py", line 1542, in _step
still_going = Animation._step(self, *args)
File "/usr/lib/python2.7/dist-packages/matplotlib/animation.py", line 1277, in _step
self._draw_next_frame(framedata, self._blit)
File "/usr/lib/python2.7/dist-packages/matplotlib/animation.py", line 1296, in _draw_next_frame
self._draw_frame(framedata)
File "/usr/lib/python2.7/dist-packages/matplotlib/animation.py", line 1814, in _draw_frame
self._drawn_artists = self._func(framedata, *self._args)
File "/home/ttt/Documents/NeuralNetworks/ParadigmPlay.py", line 79, in update_plot
scat = plt.scatter(x, y, c=d, s=s)
File "/usr/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 3378, in scatter
edgecolors=edgecolors, data=data, **kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/__init__.py", line 1718, in inner
return func(ax, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/axes/_axes.py", line 3988, in scatter
raise ValueError(msg.format(c.shape, x.size, y.size))
ValueError: c of shape (2, 3) not acceptable as a color sequence for x with size 2, y with size 2
В другом месте в код этих графиков повторяется с помощью matplotlib animation.AnimateFunction (). Как вы можете видеть, он печатает цвета за пару итераций до сбоя, а также отображает фигуру, но не продолжает анимировать.
Любая помощь будет полезна. Я могу дать более подробную информацию о коде, если это необходимо. Когда я пытаюсь сделать простейший случай ошибки, она работает каждый раз. Также приветствуются предложения по другим подходам к анимированным сетям.