Using Matplotlib Agg Backend for Image Generation

PythonPythonBeginner
Practice Now

This tutorial is from open-source community. Access the source code

Introduction

This lab will guide you through the process of using the agg backend directly to create images in Python Matplotlib. The agg backend is useful for web application developers who want full control over their code without using the pyplot interface to manage figures, figure closing, etc. In this lab, we will show you how to save the contents of the agg canvas to a file and how to extract them to a numpy array, which can in turn be passed off to Pillow.

VM Tips

After the VM startup is done, click the top left corner to switch to the Notebook tab to access Jupyter Notebook for practice.

Sometimes, you may need to wait a few seconds for Jupyter Notebook to finish loading. The validation of operations cannot be automated because of limitations in Jupyter Notebook.

If you face issues during learning, feel free to ask Labby. Provide feedback after the session, and we will promptly resolve the problem for you.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL matplotlib(("`Matplotlib`")) -.-> matplotlib/BasicConceptsGroup(["`Basic Concepts`"]) matplotlib(("`Matplotlib`")) -.-> matplotlib/PlottingDataGroup(["`Plotting Data`"]) matplotlib(("`Matplotlib`")) -.-> matplotlib/AdvancedTopicsGroup(["`Advanced Topics`"]) python(("`Python`")) -.-> python/DataStructuresGroup(["`Data Structures`"]) python(("`Python`")) -.-> python/ModulesandPackagesGroup(["`Modules and Packages`"]) python(("`Python`")) -.-> python/DataScienceandMachineLearningGroup(["`Data Science and Machine Learning`"]) matplotlib/BasicConceptsGroup -.-> matplotlib/figures_axes("`Understanding Figures and Axes`") matplotlib/BasicConceptsGroup -.-> matplotlib/saving_figures("`Saving Figures to File`") matplotlib/PlottingDataGroup -.-> matplotlib/line_plots("`Line Plots`") matplotlib/AdvancedTopicsGroup -.-> matplotlib/custom_backends("`Custom Backends`") python/DataStructuresGroup -.-> python/lists("`Lists`") python/DataStructuresGroup -.-> python/tuples("`Tuples`") python/ModulesandPackagesGroup -.-> python/importing_modules("`Importing Modules`") python/ModulesandPackagesGroup -.-> python/using_packages("`Using Packages`") python/DataScienceandMachineLearningGroup -.-> python/data_visualization("`Data Visualization`") subgraph Lab Skills matplotlib/figures_axes -.-> lab-48596{{"`Using Matplotlib Agg Backend for Image Generation`"}} matplotlib/saving_figures -.-> lab-48596{{"`Using Matplotlib Agg Backend for Image Generation`"}} matplotlib/line_plots -.-> lab-48596{{"`Using Matplotlib Agg Backend for Image Generation`"}} matplotlib/custom_backends -.-> lab-48596{{"`Using Matplotlib Agg Backend for Image Generation`"}} python/lists -.-> lab-48596{{"`Using Matplotlib Agg Backend for Image Generation`"}} python/tuples -.-> lab-48596{{"`Using Matplotlib Agg Backend for Image Generation`"}} python/importing_modules -.-> lab-48596{{"`Using Matplotlib Agg Backend for Image Generation`"}} python/using_packages -.-> lab-48596{{"`Using Matplotlib Agg Backend for Image Generation`"}} python/data_visualization -.-> lab-48596{{"`Using Matplotlib Agg Backend for Image Generation`"}} end

Create a Figure and Canvas

First, we need to create a Figure and a Canvas. The Figure defines the size, shape, and content of the plot, while the Canvas is where the Figure is drawn.

from matplotlib.backends.backend_agg import FigureCanvasAgg
from matplotlib.figure import Figure

fig = Figure(figsize=(5, 4), dpi=100)
canvas = FigureCanvasAgg(fig)

Add Plotting Data to the Figure

Now that we have a Figure and a Canvas, we can add some data to the plot. In this example, we will add a simple line plot.

ax = fig.add_subplot()
ax.plot([1, 2, 3])

Save the Figure to a File

There are two options for saving the plot. The first option is to save the Figure to a file. In this example, we will save the plot as a PNG image.

fig.savefig("test.png")

Extract the Renderer Buffer to a Numpy Array

The second option for saving the plot is to extract the renderer buffer to a numpy array. This allows us to use Matplotlib inside a cgi-script without needing to write a figure to disk. In this example, we will extract the renderer buffer and convert it to a numpy array.

canvas.draw()
rgba = np.asarray(canvas.buffer_rgba())

Save the Numpy Array to a Pillow Image

Now that we have the numpy array, we can pass it off to Pillow and save it in any format supported by Pillow. In this example, we will save the plot as a BMP image.

im = Image.fromarray(rgba)
im.save("test.bmp")

Summary

In this lab, we showed you how to use the agg backend in Python Matplotlib to create images. We created a Figure and Canvas, added data to the plot, and saved the plot as a PNG image. We also extracted the renderer buffer to a numpy array and saved the plot as a BMP image using Pillow. These techniques are useful for web application developers who want full control over their code without using the pyplot interface to manage figures, figure closing, etc.

Other Python Tutorials you may like