top of page
Writer's pictureVijithkumar V

Animated 'distance - Time graph' using the FuncAnimation class of matplotlib.



Let’s look at an instance of plotting an animated graph.

Let’s plot the trajectory of motion of an object that is moving at constant acceleration / deceleration.

The distance - time graph of an object moving at a constant acceleration has a parabolic shape. For example, I have given a graph, here.


Image of a graph with time on the x-axis and distance on the y-axis
The distance-time graph under constant acceleration

Now let us create and animate a distance- time graph for a constant acceleration, using a sequence of time values. Before plotting this graph, we need to set a couple variable ready, for the calculation of distance (Using Newton’s equation).


Importing the modules

The important modules to perform this programing task are given below.

pyplot class from the matplotlib library

FuncAnimation class from the matplotlib.animation

numpy library

Creating instances of figure and axes

Now we need to create a figure and axes, to draw artists and set data, respectively.

Generating the time values

We can generate a set of time values in the form of an array. There are two ways by which we can generate a sequence of time values: 1. using the np.arange() function, and 2. np.linspace() function. If we use np.linspace(), we will have a definite number of time values between a specified time range. On the contrary, if we use np.arange(), there will be a definite number of values at a constant interval. For the time being, I have used the np.arange() , and the array of time values is set to a variable.


Defining the variables and the calculation of distances

We need to create variables for acceleration/ deceleration, and the Initial velocity. We will be drawing a line plot for a trajectory, for a specific initial velocity, and a scatter plot for the trajectory, for a different initial velocity.

We will be calculating the distance travelled, under a constant acceleration/ deceleration, using the following equation.

s = ut + 1/2*at**2

Drawing the initial figure for line and scatter plot

Now let’s draw initial figures for line plot and scatter plot. The line plot is drawn using the Axes.plot() method and scatter plot is drawn using the Axes.scatter method. Axes.plot() returns a matplotlib.lines.Line2Dobject and Axes.scatter returns a matplotlib.collections.PathCollectionsobject.

Here we have set an initial value for the x-data and y-data. Instead of this, we can also set an empty list. For the scatter plot, the other parameters determine the property of the plot: c is for color of the marker, s is for the size of the marker, label will be used for the legends.


Setting the x-limit and y-limit

We can set the x-limit and y-limit by providing a list of lower-bound and upper-bound. Optionally we can also set the x-label and the y-label.


Creating a FuncAnimation object

Now, let’s create a FuncAnimation object, and pass in the following parameters.

  1. fig: The argument should be the figure instance on which the artists (line2D or pathCollection) are drawn.

  2. func: A function to modify the data for each each frame. The function returns the artist.

  3. frames: This determines the length of the animation. For each frame, a sequential subset of data will be used for drawing.

  4. interval : This is the duration in milliseconds between the drawing of two consecutive frames.

Defining the func(function) parameter

The func parameter allows us to modify the data and return corresponding artist to be drawn on the figure. The figure is updated with the modified data for each frame. For a Line2D artist, the figure is updated using the set_data method. For a pathCollection artist, that draws scatter plot on the figure, the data are updated using the set_offsets method.


The complete code


35 views0 comments

Comments


bottom of page