Criar BboxImage no Matplotlib

Beginner

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

Introdução

Neste laboratório, você aprenderá como criar um BboxImage no Matplotlib. Um BboxImage pode ser usado para posicionar uma imagem de acordo com uma caixa delimitadora (bounding box). Mostraremos como criar um BboxImage com texto e como criar um BboxImage para cada mapa de cores (colormap).

Dicas da VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Importar as bibliotecas necessárias

Começamos importando as bibliotecas necessárias para este tutorial. Precisaremos de matplotlib.pyplot, numpy, BboxImage, Bbox e TransformedBbox.

import matplotlib.pyplot as plt
import numpy as np

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

Criar um BboxImage com Texto

Começamos criando um BboxImage com texto. Criamos um objeto text com o método text() e o adicionamos ao objeto ax1. Em seguida, criamos um objeto BboxImage usando o método add_artist(). Passamos o método get_window_extent do objeto text para o construtor BboxImage para obter a caixa delimitadora (bounding box) para o texto. Também passamos um array 1D de forma (1, 256) para o parâmetro data do construtor BboxImage para criar uma imagem.

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

Criar um BboxImage para cada mapa de cores (colormap)

Em seguida, criamos um BboxImage para cada mapa de cores. Começamos criando uma lista de todos os mapas de cores usando o método plt.colormaps. Em seguida, criamos um loop for que itera através da lista de mapas de cores. Para cada mapa de cores, calculamos as posições ix e iy usando o método divmod(). Depois, criamos um objeto Bbox usando o método Bbox.from_bounds(). Passamos os valores ix, iy, dx e dy para o método Bbox.from_bounds() para criar a caixa delimitadora (bounding box). Em seguida, criamos um objeto TransformedBbox usando o objeto Bbox e o objeto ax2.transAxes. Finalmente, criamos um objeto BboxImage usando o método add_artist(). Passamos o objeto TransformedBbox para o construtor BboxImage para criar uma imagem com o mapa de cores.

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 o gráfico

Finalmente, mostramos o gráfico usando o método show().

plt.show()

Resumo

Neste laboratório, você aprendeu como criar um BboxImage no Matplotlib. Criamos um BboxImage com texto e um BboxImage para cada mapa de cores (colormap). Você pode usar este conhecimento para criar imagens com diferentes caixas delimitadoras (bounding boxes) e mapas de cores.