Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Mathematica: two synchronous animations

  1. Sep 14, 2011 #1
    Hello everyone.

    Using ListLinePlot and ListAnimate I have made an animation with a hundred frames or so. Also, I have an animated graph corresponding to that animation, plotting certain values. For my presentation, I would like to show the audience these two animations and for that reason I need these two animations to move in tandem. Is there a way to get two animations to be controlled by a single slider because I would need to stop the animation and manually control it in the interesting area.

    Thanks for any help you may have.
  2. jcsd
  3. Sep 14, 2011 #2


    Staff: Mentor

    There are two ways I am aware of to do this. The first is using Grid inside Manipulate:

    Grid[{{Plot[Sin[f x], {x, -3, 3},
    PlotRange -> {-1, 1}]}, {Plot[Cos[f x], {x, -3, 3},
    PlotRange -> {-1, 1}]}}], {f, 0, 10}]

    The second is to use a Manipulate together with a Dynamic:

    Manipulate[F = f;
    Plot[Sin[f x], {x, -3, 3}, PlotRange -> {-1, 1}], {f, 0, 10}]

    Dynamic[Plot[Cos[F x], {x, -3, 3}, PlotRange -> {-1, 1}]]
  4. Sep 14, 2011 #3
    This looks great. I will try it immediately. Thank you so much!:cool:
  5. Sep 14, 2011 #4
    Hm. For whatever reason the result turns to red, as if something is wrong.

    I make the first animation with ListAnimate[graphtable2], where graphtable2 is defined:
    graphtable2 = Table[myplot1[j], {j, 1, M}], where myplot1 is defined:
    myplot1[j] = ListLinePlot[{P[j], e[j], f[j], g[j]},...].

    The other is a graph which plots the Table called Final, then adds red points to the current value, depending on the slider:

    Block[{spl = ListLinePlot[Final, PlotRange -> {...}]},
    Show[spl, Graphics[{Red, PointSize[.02], Point[{Final[[j, 1]], Final[[j, 2]]}]}]]], {j, 1, M}]

    As far as I can see, by putting these two in a Grid, then wrapping a Manipulate around it should work. What am I missing?
  6. Sep 15, 2011 #5


    Staff: Mentor

    What is the error message?

    Check and see if the code I sent runs correctly without modification. If it doesn't then what version are you using? If it does then try plotting your graphs outside of a manipulate with a fixed value for the input.
  7. Sep 15, 2011 #6
    The code you send, Dale, works fine. I get two graphs and they both respond to the slider. It's my own that is having problems.

    I think the problem may be that your graphs are both defined in the same way while my animations are formed differently. The one called graphtable2 is a Table and the ListAnimate command that I use doesn't specify which parameter the slider is controlling. So putting it all into Manipulate confuses Mathematica. At least that's my assumption. I could be wrong here.
  8. Sep 16, 2011 #7


    Staff: Mentor

    ListAnimate is not going to be useful for your purpose. In order to get synchronous display you need to have both of your plots display the corresponding image for some variable, x. If you just use ListAnimate then there is nothing to control for Manipulate or react on for Dynamic. So you should use something like Show[ graphtable[[x]] ] instead of ListAnimate.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook