Introdução
O Matplotlib TextPath é um módulo que permite a criação de um caminho que contorna os caracteres de um texto. O caminho resultante pode ser usado para diversos propósitos, como um caminho de recorte (clip path) para uma imagem. Neste laboratório, você aprenderá como usar o módulo TextPath para criar e personalizar caminhos de texto para imagens.
Dicas para a 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ê.
Instalar Matplotlib
Antes de começar, você deve ter o Matplotlib instalado em seu ambiente. Você pode instalá-lo via pip executando o seguinte comando em seu terminal:
pip install matplotlib
Importar as Bibliotecas Necessárias
Primeiramente, importe as bibliotecas necessárias para criar o TextPath.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.cbook import get_sample_data
from matplotlib.image import BboxImage
from matplotlib.offsetbox import (AnchoredOffsetbox, AnnotationBbox, AuxTransformBox)
from matplotlib.patches import PathPatch, Shadow
from matplotlib.text import TextPath
from matplotlib.transforms import IdentityTransform
Criar um PathClippedImagePatch
Crie um objeto PathClippedImagePatch para desenhar uma imagem de um caminho de texto. Use o seguinte código para criar um objeto PathClippedImagePatch:
class PathClippedImagePatch(PathPatch):
def __init__(self, path, bbox_image, **kwargs):
super().__init__(path, **kwargs)
self.bbox_image = BboxImage(
self.get_window_extent, norm=None, origin=None)
self.bbox_image.set_data(bbox_image)
def set_facecolor(self, color):
super().set_facecolor("none")
def draw(self, renderer=None):
self.bbox_image.set_clip_path(self._path, self.get_transform())
self.bbox_image.draw(renderer)
super().draw(renderer)
Criar uma Caixa de Deslocamento (Offset Box)
Crie uma caixa de deslocamento (offset box) usando AuxTransformBox para adicionar o objeto PathClippedImagePatch. Use o seguinte código para criar a caixa de deslocamento:
offsetbox = AuxTransformBox(IdentityTransform())
offsetbox.add_artist(p)
Criar uma Caixa de Deslocamento Ancorada (Anchored Offset Box)
Crie uma caixa de deslocamento ancorada (anchored offset box) usando AnnotationBbox para adicionar a caixa de deslocamento e definir sua posição. Use o seguinte código para criar a caixa de deslocamento ancorada:
ao = AnchoredOffsetbox(loc='upper left', child=offsetbox, frameon=True,
borderpad=0.2)
ax1.add_artist(ao)
Adicionar Outro Texto
Adicione outro texto à imagem usando PathPatch. Use o seguinte código para adicionar outro texto:
for usetex, ypos, string in [
(False, 0.25, r"textpath supports mathtext"),
(True, 0.05, r"textpath supports \TeX"),
]:
text_path = TextPath((0, 0), string, size=20, usetex=usetex)
p1 = PathPatch(text_path, ec="w", lw=3, fc="w", alpha=0.9)
p2 = PathPatch(text_path, ec="none", fc="k")
offsetbox2 = AuxTransformBox(IdentityTransform())
offsetbox2.add_artist(p1)
offsetbox2.add_artist(p2)
ab = AnnotationBbox(offsetbox2, (0.95, ypos),
xycoords='axes fraction',
boxcoords="offset points",
box_alignment=(1., 0.),
frameon=False,
)
ax1.add_artist(ab)
Mostrar a Imagem
Mostre a imagem final usando o seguinte código:
ax1.imshow([[0, 1, 2], [1, 2, 3]], cmap=plt.cm.gist_gray_r,
interpolation="bilinear", aspect="auto")
plt.show()
Resumo
Neste laboratório, você aprendeu como usar o módulo Matplotlib TextPath para criar e personalizar caminhos de texto para imagens. Seguindo os passos descritos neste laboratório, você pode criar imagens com caminhos de texto personalizados que são úteis para uma variedade de propósitos.