Criar Gráfico de Triangulação Interativo com Matplotlib

Beginner

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

Introdução

Este laboratório irá guiá-lo através da criação de um gráfico de triangulação usando Matplotlib. Você aprenderá como criar um objeto Triangulation, usar um objeto TriFinder e configurar a interatividade para destacar o triângulo sob o cursor.

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

Criar um Objeto de Triangulação

Primeiramente, precisamos criar um objeto Triangulation. Usaremos a classe Triangulation de matplotlib.tri. Neste exemplo, criaremos um objeto Triangulation com dados aleatórios.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.tri import Triangulation

## Generate random data
x = np.random.rand(10)
y = np.random.rand(10)
triang = Triangulation(x, y)

Criar um Objeto TriFinder

Para encontrar o triângulo sob o cursor, precisamos criar um objeto TriFinder. Podemos obter o objeto TriFinder padrão do objeto Triangulation usando o método get_trifinder().

trifinder = triang.get_trifinder()

Configurar o Gráfico

Agora, podemos configurar o gráfico. Usaremos plt.subplots() para criar um objeto de figura e eixo. Em seguida, usaremos ax.triplot() para plotar a triangulação.

fig, ax = plt.subplots()
ax.triplot(triang)

Destacar o Triângulo Sob o Cursor

Queremos destacar o triângulo sob o cursor à medida que o mouse é movido sobre o gráfico. Para fazer isso, criaremos um objeto Polygon que será atualizado com os vértices do triângulo sob o cursor. Usaremos ax.add_patch() para adicionar o polígono ao gráfico.

from matplotlib.patches import Polygon

polygon = Polygon([[0, 0], [0, 0], [0, 0]], facecolor='y')
ax.add_patch(polygon)

Também criaremos uma função update_polygon() que atualizará os vértices do polígono com os vértices do triângulo sob o cursor.

def update_polygon(tri):
    if tri == -1:
        points = [0, 0, 0]
    else:
        points = triang.triangles[tri]
    xs = triang.x[points]
    ys = triang.y[points]
    polygon.set_xy(np.column_stack([xs, ys]))

Configurar a Interatividade

Precisamos configurar a interatividade para atualizar o triângulo sob o cursor. Usaremos o motion_notify_event para detectar quando o mouse é movido sobre o gráfico. Criaremos uma função on_mouse_move() que obterá o triângulo sob o cursor usando o objeto TriFinder, atualizará o polígono com os vértices do triângulo e atualizará o título do gráfico com o índice do triângulo.

def on_mouse_move(event):
    if event.inaxes is None:
        tri = -1
    else:
        tri = trifinder(event.xdata, event.ydata)
    update_polygon(tri)
    ax.set_title(f'Triangle {tri}')
    event.canvas.draw()

fig.canvas.mpl_connect('motion_notify_event', on_mouse_move)

Mostrar o Gráfico

Finalmente, podemos mostrar o gráfico usando plt.show().

plt.show()

Resumo

Neste laboratório, aprendemos como criar um gráfico de triangulação usando Matplotlib. Usamos as classes Triangulation e TriFinder para criar uma triangulação e encontrar o triângulo sob o cursor. Também configuramos a interatividade para destacar o triângulo sob o cursor.