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]