Crear BboxImage en Matplotlib

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

En este laboratorio, aprenderá a crear una BboxImage en Matplotlib. Una BboxImage se puede utilizar para posicionar una imagen de acuerdo con un cuadro delimitador. Mostraremos cómo crear una BboxImage con Texto y cómo crear una BboxImage para cada mapa de colores.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga 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 tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Importar las bibliotecas necesarias

Comenzamos importando las bibliotecas necesarias para este tutorial. Necesitaremos matplotlib.pyplot, numpy, BboxImage, Bbox y TransformedBbox.

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.image import BboxImage
from matplotlib.transforms import Bbox, TransformedBbox

Crear una BboxImage con Texto

Comenzamos creando una BboxImage con Texto. Creamos un objeto text con el método text() y lo agregamos al objeto ax1. Luego creamos un objeto BboxImage utilizando el método add_artist(). Pasamos el método get_window_extent del objeto text al constructor de BboxImage para obtener el cuadro delimitador del texto. También pasamos una matriz unidimensional de forma (1, 256) al parámetro data del constructor de BboxImage para crear una imagen.

fig, (ax1, ax2) = plt.subplots(ncols=2)

txt = ax1.text(0.5, 0.5, "test", size=30, ha="center", color="w")
ax1.add_artist(
    BboxImage(txt.get_window_extent, data=np.arange(256).reshape((1, -1))))

Crear una BboxImage para cada mapa de colores

A continuación, creamos una BboxImage para cada mapa de colores. Comenzamos creando una lista de todos los mapas de colores utilizando el método plt.colormaps. Luego creamos un bucle for que itera a través de la lista de mapas de colores. Para cada mapa de colores, calculamos la posición ix e iy utilizando el método divmod(). Luego creamos un objeto Bbox utilizando el método Bbox.from_bounds(). Pasamos los valores ix, iy, dx y dy al método Bbox.from_bounds() para crear el cuadro delimitador. Luego creamos un objeto TransformedBbox utilizando el objeto Bbox y el objeto ax2.transAxes. Finalmente, creamos un objeto BboxImage utilizando el método add_artist(). Pasamos el objeto TransformedBbox al constructor de BboxImage para crear una imagen con el mapa de colores.

cmap_names = sorted(m for m in plt.colormaps if not m.endswith("_r"))

ncol = 2
nrow = len(cmap_names) // ncol + 1

xpad_fraction = 0.3
dx = 1 / (ncol + xpad_fraction * (ncol - 1))

ypad_fraction = 0.3
dy = 1 / (nrow + ypad_fraction * (nrow - 1))

for i, cmap_name in enumerate(cmap_names):
    ix, iy = divmod(i, nrow)
    bbox0 = Bbox.from_bounds(ix*dx*(1+xpad_fraction),
                             1 - iy*dy*(1+ypad_fraction) - dy,
                             dx, dy)
    bbox = TransformedBbox(bbox0, ax2.transAxes)
    ax2.add_artist(
        BboxImage(bbox, cmap=cmap_name, data=np.arange(256).reshape((1, -1))))

Mostrar la gráfica

Finalmente, mostramos la gráfica utilizando el método show().

plt.show()

Resumen

En este laboratorio, aprendiste cómo crear una BboxImage en Matplotlib. Creamos una BboxImage con Texto y una BboxImage para cada mapa de colores. Puedes utilizar este conocimiento para crear imágenes con diferentes cuadros delimitadores y mapas de colores.