Personalizando Caminhos de Texto com Matplotlib

Beginner

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

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.