Rotação de Texto no Matplotlib

Beginner

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

Introdução

Neste laboratório, você aprenderá como rotacionar texto no Matplotlib usando o parâmetro rotation_mode. O parâmetro rotation_mode determina a ordem de rotação e alinhamento do texto. Existem dois modos disponíveis: default e anchor.

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ê.

Importar as bibliotecas necessárias

Primeiramente, precisamos importar as bibliotecas necessárias. Neste laboratório, usaremos o Matplotlib para criar os gráficos.

import matplotlib.pyplot as plt

Definir a função test_rotation_mode

Criaremos uma função chamada test_rotation_mode que criará subplots para testar os diferentes modos de rotação. Ela recebe dois parâmetros: fig e mode.

def test_rotation_mode(fig, mode):

Definir as listas de alinhamento horizontal e vertical

Em seguida, definiremos as listas de alinhamento horizontal e vertical que serão usadas para criar os subplots. Criaremos três elementos para cada lista: "left", "center" e "right" para alinhamento horizontal, e "top", "center", "baseline" e "bottom" para alinhamento vertical.

ha_list = ["left", "center", "right"]
va_list = ["top", "center", "baseline", "bottom"]

Criar os subplots

Agora, criaremos os subplots usando a função subplots. Criaremos uma grade de subplots com a mesma proporção (aspect ratio), e removeremos os ticks dos eixos x e y. Também adicionaremos uma linha vertical e horizontal no centro de cada subplot para ajudar a visualizar o alinhamento.

axs = fig.subplots(len(va_list), len(ha_list), sharex=True, sharey=True,
                   subplot_kw=dict(aspect=1),
                   gridspec_kw=dict(hspace=0, wspace=0))

for i, va in enumerate(va_list):
    for j, ha in enumerate(ha_list):
        ax = axs[i, j]
        ax.set(xticks=[], yticks=[])
        ax.axvline(0.5, color="skyblue", zorder=0)
        ax.axhline(0.5, color="skyblue", zorder=0)
        ax.plot(0.5, 0.5, color="C0", marker="o", zorder=1)

Adicionar texto aos subplots

Adicionaremos texto a cada subplot usando a função text. Usaremos os parâmetros rotation, horizontalalignment, verticalalignment e rotation_mode para rotacionar e alinhar o texto. Também usaremos o parâmetro bbox para destacar a caixa delimitadora (bounding box) do texto.

kw = (
    {} if mode == "default" else
    {"bbox": dict(boxstyle="square,pad=0.", ec="none", fc="C1", alpha=0.3)}
)

texts = {}

for i, va in enumerate(va_list):
    for j, ha in enumerate(ha_list):
        ax = axs[i, j]
        tx = ax.text(0.5, 0.5, "Tpg",
                     size="x-large", rotation=40,
                     horizontalalignment=ha, verticalalignment=va,
                     rotation_mode=mode, **kw)
        texts[ax] = tx

Destacar a caixa delimitadora (bounding box) do texto

Se o rotation_mode estiver definido como 'default', destacaremos a caixa delimitadora do texto usando um retângulo. Usaremos a função get_window_extent para obter a caixa delimitadora e transformá-la para as coordenadas de dados usando o atributo transData.

if mode == "default":
    fig.canvas.draw()
    for ax, text in texts.items():
        bb = text.get_window_extent().transformed(ax.transData.inverted())
        rect = plt.Rectangle((bb.x0, bb.y0), bb.width, bb.height,
                             facecolor="C1", alpha=0.3, zorder=2)
        ax.add_patch(rect)

Criar as subfiguras e chamar a função test_rotation_mode

Criaremos duas subfiguras e chamaremos a função test_rotation_mode com os parâmetros fig e mode.

fig = plt.figure(figsize=(8, 5))
subfigs = fig.subfigures(1, 2)
test_rotation_mode(subfigs[0], "default")
test_rotation_mode(subfigs[1], "anchor")
plt.show()

Resumo

Neste laboratório, aprendemos como rotacionar texto no Matplotlib usando o parâmetro rotation_mode. Criamos uma função chamada test_rotation_mode que criou subplots para testar os diferentes modos de rotação. Definimos as listas de alinhamento horizontal e vertical, criamos os subplots, adicionamos texto aos subplots e destacamos a caixa delimitadora (bounding box) do texto. Finalmente, criamos as subfiguras e chamamos a função test_rotation_mode.