Funções Interativas do Matplotlib

Beginner

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

Introdução

Neste laboratório, aprenderemos como usar as funções interativas no Matplotlib. Essas funções interativas incluem ginput, waitforbuttonpress e a colocação manual de rótulos (clabel). O objetivo deste laboratório é ajudá-lo a entender como usar essas funções para criar gráficos interativos no Matplotlib. Ao final deste laboratório, você será capaz de criar e modificar gráficos usando funções interativas no Matplotlib.

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

Definir um Triângulo Clicando em Três Pontos

Nesta etapa, definiremos um triângulo clicando em três pontos. Usaremos as funções ginput e waitforbuttonpress para conseguir isso. A função ginput nos permite selecionar pontos no gráfico com o mouse, e a função waitforbuttonpress aguarda um evento de pressionamento de botão.

import time
import matplotlib.pyplot as plt
import numpy as np

def tellme(s):
    print(s)
    plt.title(s, fontsize=16)
    plt.draw()

plt.figure()
plt.xlim(0, 1)
plt.ylim(0, 1)

tellme('Você definirá um triângulo, clique para começar')

plt.waitforbuttonpress()

while True:
    pts = []
    while len(pts) < 3:
        tellme('Selecione 3 cantos com o mouse')
        pts = np.asarray(plt.ginput(3, timeout=-1))
        if len(pts) < 3:
            tellme('Pontos insuficientes, começando de novo')
            time.sleep(1)  ## Aguarda um segundo

    ph = plt.fill(pts[:, 0], pts[:, 1], 'r', lw=2)

    tellme('Feliz? Clique em uma tecla para sim, clique com o mouse para não')

    if plt.waitforbuttonpress():
        break

    ## Get rid of fill
    for p in ph:
        p.remove()

Contorno de Acordo com a Distância dos Cantos do Triângulo

Nesta etapa, faremos o contorno de acordo com a distância dos cantos do triângulo. Definiremos uma função de distância de pontos individuais e faremos o contorno de acordo com essa função.

## Define a nice function of distance from individual pts
def f(x, y, pts):
    z = np.zeros_like(x)
    for p in pts:
        z = z + 1/(np.sqrt((x - p[0])**2 + (y - p[1])**2))
    return 1/z

X, Y = np.meshgrid(np.linspace(-1, 1, 51), np.linspace(-1, 1, 51))
Z = f(X, Y, pts)

CS = plt.contour(X, Y, Z, 20)

tellme('Use o mouse para selecionar as localizações dos rótulos do contorno, botão do meio para finalizar')
CL = plt.clabel(CS, manual=True)

Zoom

Nesta etapa, faremos zoom no gráfico. Usaremos a função ginput para selecionar dois cantos da caixa de zoom e a função waitforbuttonpress para finalizar o zoom.

tellme('Agora faça um zoom aninhado, clique para começar')
plt.waitforbuttonpress()

while True:
    tellme('Selecione dois cantos do zoom, botão do meio do mouse para finalizar')
    pts = plt.ginput(2, timeout=-1)
    if len(pts) < 2:
        break
    (x0, y0), (x1, y1) = pts
    xmin, xmax = sorted([x0, x1])
    ymin, ymax = sorted([y0, y1])
    plt.xlim(xmin, xmax)
    plt.ylim(ymin, ymax)

tellme('Tudo Feito!')
plt.show()

Resumo

Neste laboratório, aprendemos como usar funções interativas no Matplotlib para criar e modificar gráficos. Usamos ginput, waitforbuttonpress e a colocação manual de clabel para definir um triângulo, fazer o contorno de acordo com a distância dos cantos do triângulo e fazer zoom no gráfico. Ao usar essas funções, podemos criar gráficos interativos que permitem ao usuário interagir com os dados e explorá-los com mais detalhes.