Animations¶
Once you know how to graph things, we can (usually for our own benefit) make our data more interactive, either by creating an animation or allowing the user to manipulate information without having to re-evaluate the code.
Manipulate¶
First, an example:
Manipulate[
Plot[
PDF[NormalDistribution[mean, std], x], {x, -10, 10},
PlotRange -> {{-10, 10}, {0, 1}}],
{mean, -4, 4},
{std, .5, 10}]
The code above draws a Normal distribution \(f(x)=\frac{e^{-\frac{(\mu-x)^2}{2\sigma^2}}}{\sqrt{2\pi}\sigma}\) where \(\mu=\) mean and \(\sigma=\) std, but allows the user to specify the mean and standard deviation of the function. To see this, we can use a Mathematica CDF (Computable Document Format) as seen below (will need to have Mathematica installed or at least the Mathematica CDF viewer).
[To create a web-embeddable CDF, select the code (or graph) you want, then select “File”>”CDF Export”>”Web Embeddable” and follow the menus]
We can specify specific values each user-selected value can take on, but the applications are nearly endless. If it needs a number in Mathematica it can almost certainly be manipulated.
One nice example is if we have data as a function of time, we can manually manipulate it and watch it evolve. For example, if we have data
table = Table[{t, Sin[x] Sin[t], Cos[x] Sin[t]},
{t, 1, 21, .1}, (*Want to index by time, so it is listed first*)
{x, -10, 10, .2}];
We could easily plot it in 3D:
ListPointPlot3D[table]
But this is largely not useful. We see color, and could add a better color function, but we only have marginal indication as to how the data is changing. So, what if we plotted it one layer at at a time in 3D?
Manipulate[
ListPointPlot3D[table[[i, All]], (*Gets the i-th layer of data in time*)
PlotRange -> {{1, 21}, {-1, 1}, {-1, 1}}],
{i, 1, 200, 1}]
This can be useful, but if we are controlling time ourselves (much as Time Lords do), we don’t really need the “time” axis. So, we can plot in 2D:
Manipulate[
ListPlot[
(*first, get i-th layer, but then want the data components of all
the entries, so need the second indexing too*)
table[[i, All]][[All, 2 ;; 3]],
PlotRange -> {{-1, 1}, {-1, 1}}],
{i, 1, 200, 1}]
Animate¶
Animate is very similar to Manipulate. But instead of allowing the user to control what value is being used, it will do so automatically, giving rise to video clips.
Unfortunately, we can’t get animated exported objects as easily as we can get static images. For that, we have to instead provide a Table instead of an Animate, which we then export (see the Export section).