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.
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.