Uso del backend agg de Matplotlib para la generación de imágenes

PythonPythonBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Esta práctica te guiará a través del proceso de utilizar directamente el backend agg para crear imágenes en Python Matplotlib. El backend agg es útil para los desarrolladores de aplicaciones web que deseen tener un control total sobre su código sin utilizar la interfaz pyplot para administrar figuras, cerrar figuras, etc. En esta práctica, te mostraremos cómo guardar el contenido de la superficie agg en un archivo y cómo extraerlo a una matriz numpy, que a su vez puede ser pasada a Pillow.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haz clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tengas que esperar unos segundos a que Jupyter Notebook termine de cargar. La validación de las operaciones no puede automatizarse debido a las limitaciones de Jupyter Notebook.

Si te encuentras con problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona retroalimentación después de la sesión y te resolveremos el problema inmediatamente.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) matplotlib(("Matplotlib")) -.-> matplotlib/BasicConceptsGroup(["Basic Concepts"]) matplotlib(("Matplotlib")) -.-> matplotlib/PlottingDataGroup(["Plotting Data"]) 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{{"Uso del backend agg de Matplotlib para la generación de imágenes"}} matplotlib/saving_figures -.-> lab-48596{{"Uso del backend agg de Matplotlib para la generación de imágenes"}} matplotlib/line_plots -.-> lab-48596{{"Uso del backend agg de Matplotlib para la generación de imágenes"}} python/lists -.-> lab-48596{{"Uso del backend agg de Matplotlib para la generación de imágenes"}} python/tuples -.-> lab-48596{{"Uso del backend agg de Matplotlib para la generación de imágenes"}} python/importing_modules -.-> lab-48596{{"Uso del backend agg de Matplotlib para la generación de imágenes"}} python/using_packages -.-> lab-48596{{"Uso del backend agg de Matplotlib para la generación de imágenes"}} matplotlib/custom_backends -.-> lab-48596{{"Uso del backend agg de Matplotlib para la generación de imágenes"}} python/data_visualization -.-> lab-48596{{"Uso del backend agg de Matplotlib para la generación de imágenes"}} end

Crear una Figura y un lienzo

En primer lugar, necesitamos crear una Figura y un lienzo. La Figura define el tamaño, la forma y el contenido de la trama, mientras que el lienzo es donde se dibuja la Figura.

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

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

Agregar datos de trazado a la Figura

Ahora que tenemos una Figura y un lienzo, podemos agregar algunos datos a la trama. En este ejemplo, agregaremos un trazado de línea simple.

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

Guardar la Figura en un archivo

Hay dos opciones para guardar la trama. La primera opción es guardar la Figura en un archivo. En este ejemplo, guardaremos la trama como una imagen PNG.

fig.savefig("test.png")

Extraer el búfer del renderizador a una matriz de numpy

La segunda opción para guardar la trama es extraer el búfer del renderizador a una matriz de numpy. Esto nos permite utilizar Matplotlib dentro de un script cgi sin necesidad de escribir una figura en el disco. En este ejemplo, extraeremos el búfer del renderizador y lo convertiremos en una matriz de numpy.

import numpy as np

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

Guardar la matriz de numpy en una imagen de Pillow

Ahora que tenemos la matriz de numpy, podemos pasarla a Pillow y guardarla en cualquier formato admitido por Pillow. En este ejemplo, guardaremos la trama como una imagen BMP.

from PIL import Image

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

Resumen

En este laboratorio, te mostramos cómo usar el backend agg en Matplotlib de Python para crear imágenes. Creamos una Figura y un lienzo, agregamos datos a la trama y guardamos la trama como una imagen PNG. También extrajimos el búfer del renderizador a una matriz de numpy y guardamos la trama como una imagen BMP usando Pillow. Estas técnicas son útiles para los desarrolladores de aplicaciones web que deseen tener un control total sobre su código sin usar la interfaz de pyplot para administrar figuras, cerrar figuras, etc.