Re: Animate parametric plot of two lists?
- To: mathgroup at smc.vnet.net
 - Subject: [mg101514] Re: [mg101475] Animate parametric plot of two lists?
 - From: "David Park" <djmpark at comcast.net>
 - Date: Thu, 9 Jul 2009 01:55:36 -0400 (EDT)
 - References: <27402470.1247054225882.JavaMail.root@n11>
 
I'm not certain which is better, to store a large number of complete plots,
or to generate each one.
Generating each of the plots, which seems to be rapid enough for me, could
be done as follows.
f[t_] := Cos[t] 
g[t_] := Sin[t]
list1 = Table[f[t], {t, 0, 2 Pi, .1}];
list2 = Table[g[t], {t, 0, 2 Pi, .1}];
n = Length[list1];
plotdat = Thread[{list1, list2}];
Animate[
 Show[
  ListPlot[Take[plotdat, k],
   Joined -> True,
   PlotStyle -> {Red, Dashed},
   AspectRatio -> Automatic,
   PlotRange -> 1.2],
  ListPlot[Take[plotdat, k],
   PlotMarkers -> {Automatic, 12},
   AspectRatio -> Automatic,
   PlotRange -> 1.2]
  ],
 {k, 1, n, 1}]
But not (for some reason that I don't understand) as follows:
Animate[
 Show[
  ListPlot[Take[plotdat, k],
   PlotMarkers -> {Automatic, 12},
   AspectRatio -> Automatic,
   PlotRange -> 1.2],
  ListPlot[Take[plotdat, k],
   Joined -> True,
   PlotStyle -> {Red, Dashed},
   AspectRatio -> Automatic,
   PlotRange -> 1.2]
  ],
 {k, 1, n, 1}]
But, as usual, I find it easier to do it with Presentations where the
various uses of the options are untangled and the order doesn't matter.
Needs["Presentations`Master`"]
Animate[
 Draw2D[
  {ListDraw[Take[plotdat, k],
    PlotMarkers -> {Automatic, 12}],
   ListDraw[Take[plotdat, k],
    Joined -> True,
    PlotStyle -> {Red, Dashed}]},
  Axes -> True,
  PlotRange -> 1.2],
 {k, 1, n, 1}]
If you wanted to pre-compute all of the frames, you could just pre-compute
the primitives without generating the entire plots.
Clear[frame]
frame[k_]:={ListDraw[Take[plotdat,k],
PlotMarkers->{Automatic,12}],
ListDraw[Take[plotdat,k],
Joined->True,
PlotStyle->{Red,Dashed}]};
framelist=Table[frame[k],{k,1,n}];
Animate[
 Draw2D[
  {framelist[[k]]},
  PlotRange -> 1.2,
  Axes -> True],
 {k, 1, n, 1}]
David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/  
From: Porscha Louise McRobbie [mailto:pmcrobbi at umich.edu] 
Hello,
When I have explicit formulas for two functions of time, it's simple 
to animate the parametric plot of them by using ParametricPlot inside 
Animate.
I'd like to create a similar animation now, but using two lists of 
numbers. Apparently there is  no function such as ListParametricPlot.
Below a roundabout way I found (I want to show both a dashed line and 
a point tracing out the curve in time). Is there a better way to do 
this? I'd like to be able to include many more frames, and this method 
seems inefficient.
Any suggestion/help is appreciated.
Porscha
(*Animate a parametric plot from two lists*)
In[1]:= f[t_] := Cos[t]
In[2]:= g[t_] := Sin[t]
In[27]:= list1 = Table[f[t], {t, 0, 2 Pi, .1}];
In[28]:= list2 = Table[g[t], {t, 0, 2 Pi, .1}];
In[29]:= n = Length[list1];
In[30]:= plotdat = Thread[{list1, list2}];
In[31]:= frame = ConstantArray[0.0, n];
In[32]:= Do[
  frame[[j]] =
   Show[ListLinePlot[plotdat[[1 ;; j]], PlotStyle -> {Red, Dashed},
     PlotRange -> {{-1.2, 1.2}, {-1.2, 1.2}}],
    ListPlot[plotdat[[1 ;; j]],
     PlotRange -> {{-1.2, 1.2}, {-1.2, 1.2}},
     PlotMarkers -> {Automatic, 12}]], {j, 1, n}]
In[33]:= ListAnimate[frame]