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"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) matplotlib(("Matplotlib")) -.-> matplotlib/AdvancedTopicsGroup(["Advanced Topics"]) 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") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/tuples("Tuples") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/using_packages("Using Packages") matplotlib/AdvancedTopicsGroup -.-> matplotlib/custom_backends("Custom Backends") 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"}} 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"}} matplotlib/custom_backends -.-> 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")

レンダラーバッファを numpy 配列に抽出する

グラフを保存する 2 番目のオプションは、レンダラーバッファを numpy 配列に抽出することです。これにより、cgi スクリプト内で Matplotlib を使用して、グラフをディスクに書き込む必要なく済みます。この例では、レンダラーバッファを抽出して numpy 配列に変換します。

import numpy as np

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

numpy 配列を Pillow 画像に保存する

numpy 配列ができたので、それを Pillow に渡して、Pillow がサポートする任意の形式で保存することができます。この例では、グラフを BMP 画像として保存します。

from PIL import 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.