Использование бэкенда agg в Matplotlib для генерации изображений

Beginner

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

Введение

Эта лабораторная работа проведет вас по процессу прямого использования бэкенда agg для создания изображений в Python Matplotlib. Бэкенд agg полезен для веб-разработчиков, которые хотят иметь полный контроль над своим кодом, не используя интерфейс pyplot для управления фигурами, закрытием фигур и т.д. В этой лабораторной работе мы покажем, как сохранить содержимое холста agg в файл и как извлечь его в массив numpy, который, в свою очередь, можно передать Pillow.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Создание фигуры и холста

Во - первых, нам нужно создать фигуру (Figure) и холст (Canvas). Фигура определяет размер, форму и содержимое графика, а холст - это место, где рисуется фигура.

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

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

Добавление данных для построения графика в фигуру

Теперь, когда у нас есть фигура (Figure) и холст (Canvas), мы можем добавить некоторые данные в график. В этом примере мы добавим простой линейный график.

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

Сохранение фигуры в файл

Для сохранения графика есть два варианта. Первый вариант - сохранить фигуру (Figure) в файл. В этом примере мы сохраним график в виде PNG - изображения.

fig.savefig("test.png")

Извлечение буфера рендеринга в массив numpy

Второй вариант сохранения графика - это извлечение буфера рендеринга в массив numpy. Это позволяет использовать Matplotlib внутри cgi - сценария без необходимости записывать фигуру на диск. В этом примере мы извлечем буфер рендеринга и преобразуем его в массив 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")

Резюме

В этом практическом занятии мы показали, как использовать бэкенд agg в Python Matplotlib для создания изображений. Мы создали фигуру (Figure) и холст (Canvas), добавили данные в график и сохранили график в виде PNG - изображения. Мы также извлекли буфер рендеринга в массив numpy и сохранили график в виде BMP - изображения с использованием Pillow. Эти методы полезны для веб - разработчиков, которые хотят иметь полный контроль над своим кодом без использования интерфейса pyplot для управления фигурами, закрытием фигур и т.д.