Sto solo cercando di riprodurre questo semplice example di un'animazione in Matplotlib ma utilizzando PyPlot in Julia. Ho difficoltà con la definizione dell'iteratore simData()
passato alla funzione funcAnimation
, perché sembra che PyPlot non riconosca l'iteratore che ho definito in Julia (tramite un Task) come tale.Implementazione di un iteratore in Julia per un'animazione con PyPlot
Ecco il mio approccio per definire la stessa funzione simData()
:
function simData()
t_max = 10.0
dt = 0.05
x = 0.0
t = 0.0
function it()
while t < t_max
x = sin(pi*t)
t = t+dt
produce(x,t)
end
end
Task(it)
end
come si può verificare, questo tipo di rendimenti iteratori in teoria gli stessi valori che il generatore di pitone simData()
dell'esempio (provate ad esempio collect(simData())
. Tuttavia, ho ottenuto questo errore quando provo a fare l'animazione
LoadError: PyError (:PyObject_Call) <type 'exceptions.TypeError'>
TypeError('PyCall.jlwrap object is not an iterator',)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/animation.py", line 1067, in __init__
TimedAnimation.__init__(self, fig, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/animation.py", line 913, in __init__
*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/animation.py", line 591, in __init__
self._init_draw()
File "/usr/local/lib/python2.7/dist-packages/matplotlib/animation.py", line 1092, in _init_draw
self._draw_frame(next(self.new_frame_seq()))
while loading In[5], in expression starting on line 42
in pyerr_check at /home/diegotap/.julia/v0.4/PyCall/src/exception.jl:56
[inlined code] from /home/diegotap/.julia/v0.4/PyCall/src/exception.jl:81
in pycall at /home/diegotap/.julia/v0.4/PyCall/src/PyCall.jl:402
in call at /home/diegotap/.julia/v0.4/PyCall/src/PyCall.jl:429
come ho detto, penso che il problema è che l'iteratore Julia non è riconosciuta come tale da Python. avete qualche idea ab come risolverlo?
PS: Here è un notebook Jupyter con il codice completo utilizzato per l'animazione.