Introdução
Neste tutorial, criaremos um donut usando ~.path.Path e ~.patches.PathPatch do Matplotlib. Usaremos a função make_circle() para criar o círculo e concatenaremos os subcaminhos interno e externo para criar o donut.
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ê.
Importando as Bibliotecas Necessárias
Começaremos importando as bibliotecas necessárias para este tutorial.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatches
import matplotlib.path as mpath
Definindo a Função Auxiliar
Definiremos uma função auxiliar wise() para determinar a orientação do caminho (path).
def wise(v):
if v == 1:
return "CCW"
else:
return "CW"
Criando o Círculo
Criaremos o círculo usando a função make_circle(). A função recebe o raio do círculo como entrada e retorna as coordenadas x e y do círculo.
def make_circle(r):
t = np.arange(0, np.pi * 2.0, 0.01)
t = t.reshape((len(t), 1))
x = r * np.cos(t)
y = r * np.sin(t)
return np.hstack((x, y))
Criando o Donut
Criaremos o donut concatenando os subcaminhos interno e externo. Usaremos codes para especificar o tipo de cada vértice (MOVETO, LINETO, etc.). Em seguida, criaremos um objeto Path usando mpath.Path e um objeto PathPatch usando mpatches.PathPatch. Finalmente, adicionaremos o objeto PathPatch ao objeto Axes usando ax.add_patch().
Path = mpath.Path
fig, ax = plt.subplots()
inside_vertices = make_circle(0.5)
outside_vertices = make_circle(1.0)
codes = np.ones(
len(inside_vertices), dtype=mpath.Path.code_type) * mpath.Path.LINETO
codes[0] = mpath.Path.MOVETO
for i, (inside, outside) in enumerate(((1, 1), (1, -1), (-1, 1), (-1, -1))):
## Concatenate the inside and outside subpaths together, changing their
## order as needed
vertices = np.concatenate((outside_vertices[::outside],
inside_vertices[::inside]))
## Shift the path
vertices[:, 0] += i * 2.5
## The codes will be all "LINETO" commands, except for "MOVETO"s at the
## beginning of each subpath
all_codes = np.concatenate((codes, codes))
## Create the Path object
path = mpath.Path(vertices, all_codes)
## Add plot it
patch = mpatches.PathPatch(path, facecolor='#885500', edgecolor='black')
ax.add_patch(patch)
ax.annotate(f"Outside {wise(outside)},\nInside {wise(inside)}",
(i * 2.5, -1.5), va="top", ha="center")
ax.set_xlim(-2, 10)
ax.set_ylim(-3, 2)
ax.set_title('Mmm, donuts!')
ax.set_aspect(1.0)
plt.show()
Resumo
Neste tutorial, aprendemos como criar um donut usando ~.path.Path e ~.patches.PathPatch do Matplotlib. Usamos a função make_circle() para criar o círculo e concatenamos os subcaminhos interno e externo para criar o donut. Também aprendemos como especificar o tipo de cada vértice e criar um objeto Path usando mpath.Path. Finalmente, aprendemos como criar um objeto PathPatch usando mpatches.PathPatch e adicioná-lo ao objeto Axes usando ax.add_patch().
Resumo
Parabéns! Você concluiu o laboratório Criando Donuts Usando ~.path.Path e ~.patches.PathPatch. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.