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.