Converting an animation from GR to Plots

plotting

#1

I’m trying to figure out animations in Plots.jl. I started off by porting a double pendulum simulation from the GR examples [https://github.com/jheinen/gr/blob/master/examples/double_pendulum.py], refactored a bit so it generates a list of positions in an array and then plots that. The main animation code is below; it’s a direct translation of the python code that calls GR.clearws(), sets a window and draws the pendulum via GR.polyline and GR.polymarker, and then calls GR.updatews(). This works fine to display an animation but I cannot figure out how to integrate it with the Plots animation mechanisms.

I’ve gone through the docs and examples, but they mostly talk about function plots, not making pictures with GR.polyline, and I’m missing the last step that connects the two.

using Plots; gr()

# run_simulation code snipped

function draw_polyline(vs)
  xs, ys = to_xy_lists(vs)
  GR.polyline(xs, ys)
end

function draw_polymarker(vs)
  xs, ys = to_xy_lists(vs)
  GR.polymarker(xs, ys)
end

function draw(block, window)
  GR.clearws()
  GR.setviewport(0, 1, 0, 1)
  GR.setwindow(window...)
  GR.setmarkertype(GR.MARKERTYPE_SOLID_CIRCLE)
  GR.fillarea([-0.2, 0.2, 0.2, -0.2], [0.75, 0.75, 0.8, 0.8])
  block()
  GR.updatews()
end

function draw_pendulum(positions, n)
  l = l1 + l2
  mass = [m1, m2]
  draw((-l, l, -l, l)) do
    ps = positions[n]
    draw_polyline(append!([pivot], ps))
    GR.setmarkercolorind(86)
    for i = 1:2
      GR.setmarkersize(3 * mass[i])
      draw_polymarker([ps[i]])
    end
  end
end

n_frames = 100
out = run_simulation(n_frames)
for x in 1:n_frames
  draw_pendulum(out, x)                                                                                                     
  sleep(0.1)                                                                                                                
end           

#2

failing that, can someone suggest the best way to draw arbitrary points and curves on a frame, and both display and stitch those frames into an animated gif? i’m mostly focused on mathematical/scientific demonstrations like the ones here: https://en.wikipedia.org/wiki/User:LucasVB/Gallery