Real-Time Plotting in Matplotlib: A Guide to Update Plot In Real-Time

Are you interested in real-time plotting in Matplotlib? When you have a stream of data from sensors or want to visualize your simulations, real-time plotting comes in handy.

In this article, we will discuss the two primary functions of Matplotlib that allow you to plot in real-time and the methods for updating variables in these plots.

## FuncAnimation() Function

Matplotlib’s FuncAnimation() function allows us to update the plot in real-time by passing data to the scatter plot at a specified interval. The function is excellent for real-time applications because it can handle vast datasets and only updates the graph when new data is available.

To use FuncAnimation(), we must import the function and define the figure we want to plot. We also need to define a function that will generate the frames for the plot.

We can, then, pass this function along with the figure to FuncAnimation() and specify the interval of updates in milliseconds.

## Here is a simple example:

“`

## import numpy as np

import matplotlib.pyplot as plt

from matplotlib.animation import FuncAnimation

fig, ax = plt.subplots()

xdata, ydata = [], []

ln, = plt.plot([], [], ‘ro’)

def update(frame):

xdata.append(frame)

ydata.append(np.sin(frame))

ln.set_data(xdata, ydata)

return ln

ani = FuncAnimation(fig, update, frames=np.linspace(0, 10, 100),

blit=True, interval=50)

plt.show()

“`

In this example, we create a sine wave by updating the xdata and ydata arrays for each frame passed to update(). We then set these arrays as the scatter plot’s x and y values and return the scatter plot object.

The update() function is called every 50 milliseconds and generates 100 frames.

canvas.draw() Along With canvas_flush_events()

Matplotlib’s canvas.draw() and canvas_flush_events() functions update the plot in real-time by adding new scatter points to an existing scatter plot.

We can use these functions, along with set_xdata() and set_ydata(), to append new data to the plot without the need to create a new scatter plot object.

Here’s an example:

“`

## import numpy as np

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

sc = ax.scatter([], [], color=’blue’, s=10)

plt.xlim(0, 10)

plt.ylim(-1, 1)

for i in range(100):

x = np.linspace(0, 10, 100)

y = np.sin(x)

sc.set_offsets(np.c_[x[:i], y[:i]])

sc.axes.figure.canvas.draw()

sc.axes.figure.canvas.flush_events()

“`

In this example, we create a scatter plot object and define the x and y limits of the plot. In the for loop, we generate 100 data points and append them to the scatter plot using set_offsets().

We then update the scatter plot using canvas.draw() and flush the events using canvas.flush_events().

## Updating Variables in Real-Time Plotting

## Updating Variables with set_xdata() and set_ydata()

To update the variables in an existing scatter plot in real-time, we can use the set_xdata() and set_ydata() functions. These functions allow us to update the x and y values of an existing scatter plot without the need to create a new scatter plot object.

Here’s an example:

“`

## import numpy as np

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

x = np.linspace(0, 10, 100)

y = np.sin(x)

sc = ax.scatter(x, y, color=’blue’, s=10)

plt.xlim(0, 10)

plt.ylim(-1, 1)

for i in range(100):

x[i] = i/10

y[i] = np.cos(i/6)

sc.set_offsets(np.c_[x, y])

sc.set_xdata(x)

sc.set_ydata(y)

plt.pause(0.1)

plt.draw()

“`

In this example, we define the x and y arrays and create a scatter plot using these arrays. We then update the x and y arrays in the for loop and append the new data points using set_offsets().

We update the scatter plot’s x and y data using set_xdata() and set_ydata() and pause the loop for 0.1 seconds using plt.pause().

## Updating Variables and Adding Scatter Points

We can also update the variables and add new scatter points in real-time. Here’s an example:

“`

## import numpy as np

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

x = np.linspace(0, 10, 100)

y = np.sin(x)

sc = ax.scatter(x, y, color=’blue’, s=10)

plt.xlim(0, 10)

plt.ylim(-1, 1)

for i in range(100):

x = np.append(x, i/10)

y = np.append(y, np.cos(i/6))

sc.set_offsets(np.c_[x, y])

plt.pause(0.1)

plt.draw()

“`

In this example, we start with the same x and y arrays as before, create a scatter plot, and define the x and y limits as before. In the for loop, we append new data points to the x and y arrays, update the scatter plot using set_offsets(), and pause the loop for 0.1 seconds.

## Conclusion

In this article, we have discussed real-time plotting in Matplotlib and how to update variables in an existing scatter plot in real-time using set_xdata() and set_ydata(). We also looked at methods for updating and adding new data points to a scatter plot in real-time using FuncAnimation() and canvas.draw() along with canvas.flush_events().

With this knowledge, you can visualize real-time data streams and simulations and create interactive plots.

## Displaying Real-Time Plotting with Animation and Canvas

Real-time plotting has become an essential tool for data visualization. It is a way to show real-time changes in data and simulations by observing the evolution of the data on a live plot.

In Matplotlib, we can make real-time plotting display with the help of the FuncAnimation() function and canvas.draw() along with canvas.flush_events(). 1.

## Displaying Real-Time Plotting with

## FuncAnimation() Function

Matplotlib provides a built-in function called FuncAnimation(). It can be used to create animated figures for real-time plotting.

The FuncAnimation() function creates a series of frames that are then shown as a loop. It is used to update the plot in real-time by passing data to the scatter plot at a specified interval.

FuncAnimation() function is great for real-time applications because of its ability to handle vast datasets and only updates the graph when new data is available. To display real-time plotting with FuncAnimation() function, we need to:

– Import the necessary modules (Matplotlib and FuncAnimation()).

– Define the figure to plot and the initial values of x and y. – Create the function that will generate the frames for the plot.

– Pass this function, along with the figure, to FuncAnimation() and specify the interval of updates in milliseconds. – To save the animation as a .gif or .mp4 file, we need to add the line animation.save(filename.mp4, writer=ffmpeg).

Here’s an example:

“`

## import numpy as np

import matplotlib.pyplot as plt

from matplotlib.animation import FuncAnimation

fig, ax = plt.subplots()

x = np.linspace(0, 10, 100)

y = np.sin(x)

scat = ax.scatter([], [])

def update(frame):

y = np.sin(x + 0.1 * frame)

scat.set_offsets(np.c_[x, y])

return scat,

ani = FuncAnimation(fig, update, frames=100, interval=50)

plt.show()

“`

In this example, we define the figure using the subplots() function and create the initial x and y arrays. We create a scatter plot using scat = ax.scatter([], []) and define the update() function that will be called for each frame of the animation.

The animation is created using the FuncAnimation() function and is shown using plt.show(). To save the animation as an .mp4 file, we can add the line animation.save(filename.mp4, writer=ffmpeg).

2. Displaying Real-Time Plotting with canvas.draw() and canvas.flush_events()

Another way to display real-time plotting is by using canvas.draw() and canvas.flush_events().

This method can be used to add new scatter points to an existing scatter plot without creating a new scatter plot object. Every time we want to add new data points to our plot, we use these functions to update the plot in real-time.

To display real-time plotting with canvas.draw() and canvas.flush_events() function, we need to:

– Import the necessary modules (Matplotlib and canvas). – Create the scatter plot and define the initial values of x and y.

– In the loop, update the x and y arrays and append new data points using set_offsets() and set_xdata() and set_ydata(). – Update the scatter plot at the end of each iteration using the canvas.draw() and canvas.flush_events() functions.

Here’s an example:

“`

## import numpy as np

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

x = np.linspace(0, 10, 100)

y = np.sin(x)

scat = ax.scatter(x, y, s=3)

for i in range(100):

x[i] = i/10

y[i] = np.cos(i/5)

scat.set_offsets(np.c_[x, y])

scat.set_xdata(x)

scat.set_ydata(y)

fig.canvas.draw()

fig.canvas.flush_events()

“`

In this example, we define the figure using the subplots() function and create the initial x and y arrays. We create a scatter plot using scat = ax.scatter(x, y, s=3) and set the initial data using x and y arrays.

In the for loop, we update the x and y arrays and append new data points using set_offsets() and set_xdata() and set_ydata(). We update the scatter plot using the fig.canvas.draw() and fig.canvas.flush_events() functions.

## Required Preparations for Real-Time Plotting in Matplotlib

Real-time plotting requires some preparations that need to be done at the beginning of the program. These preparations involve importing the necessary modules, turning on interactive mode, and clearing previous figures before updating the plot.

1. Required Import Statements

To perform the real-time plotting, we need to import the necessary modules: Matplotlib and animation.

The animation module includes classes to create and save animations. Here is an example code block:

“`

import matplotlib.pyplot as plt

import matplotlib.animation as animation

“`

2.

## Turning on Interactive Mode and Clearing Figures

To update the plot in real-time, Matplotlib has an interactive mode that needs to be turned on in the program. Interactive mode allows the program to run continuously, and every time there is an update in the data, it updates the plot.

We also need to clear the previous plot’s data before updating the plot. We can use the plt.clf() function or plt.cla() function to clear the figure or the axes, respectively.

Here’s an example:

“`

import matplotlib.pyplot as plt

# turn on interactive mode

plt.ion()

# create the figure

fig, ax = plt.subplots()

# clear previous figures

ax.cla()

“`

In this example, we turn on the interactive mode using plt.ion(). We create the figure using subplots() function and clear the previous figures using ax.cla().

If we want to clear the whole figure, we use plt.clf() function instead.

## Conclusion

Real-time plotting is an essential tool for data visualization and simulation. In Matplotlib, it can be done efficiently with the help of the FuncAnimation() function and canvas.draw() along with canvas.flush_events().

We also need to do some preparations, such as importing the necessary modules, turning on the interactive mode, and clearing the previous figures. With the knowledge of these techniques, we can create interactive plots that represent real-time changes in our data and simulations.

Real-time plotting has become an essential tool for data visualization and simulation. Matplotlib provides efficient ways to accomplish real-time plotting using FuncAnimation() function or canvas.draw() and canvas.flush_events().

To update the plot, set_xdata() and set_ydata() functions can be used to update the existing scatter plot, or new data can be appended to the plot by using the set_offsets() function. Importing necessary modules and turning on interactive mode are required to display real-time plotting.

These techniques enable us to create interactive plots that display real-time changes in our data and simulations, making it easier to identify and respond to emerging trends. The ability to visualize the evolving data in real-time makes the analysis more interactive and engaging, leading to more accurate and informed insights.