Sliders com Ajuste em Matplotlib

Beginner

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

Introdução

Neste laboratório, você aprenderá como usar Matplotlib para criar sliders (controles deslizantes) com valores discretos. Você aprenderá como restringir os valores de um slider a um conjunto de valores permitidos e ajustar os valores do slider a esses valores permitidos.

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

Nesta etapa, você importará as bibliotecas necessárias para este laboratório. Você usará Matplotlib para criar os sliders e NumPy para gerar os dados a serem plotados.

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.widgets import Button, Slider

Gerar Dados

Nesta etapa, você gerará os dados a serem plotados. Você criará uma onda senoidal com uma frequência de 3 Hz e uma amplitude de 5.

t = np.arange(0.0, 1.0, 0.001)
a0 = 5
f0 = 3
s = a0 * np.sin(2 * np.pi * f0 * t)

Criar a Figura e os Eixos

Nesta etapa, você criará a figura e os eixos para o gráfico. Você também ajustará a posição dos eixos para abrir espaço para os sliders.

fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.25)
l, = ax.plot(t, s, lw=2)

ax_freq = fig.add_axes([0.25, 0.1, 0.65, 0.03])
ax_amp = fig.add_axes([0.25, 0.15, 0.65, 0.03])

Definir Valores Permitidos para o Slider de Amplitude

Nesta etapa, você definirá os valores permitidos para o slider de amplitude. O slider de amplitude usará esses valores para se ajustar ao valor permitido mais próximo.

## define the values to use for snapping
allowed_amplitudes = np.concatenate([np.linspace(.1, 5, 100), [6, 7, 8, 9]])

Criar os Sliders

Nesta etapa, você criará os sliders. Você criará um slider para a amplitude e um slider para a frequência.

samp = Slider(
    ax_amp, "Amp", 0.1, 9.0,
    valinit=a0, valstep=allowed_amplitudes,
    color="green"
)

sfreq = Slider(
    ax_freq, "Freq", 0, 10*np.pi,
    valinit=2*np.pi, valstep=np.pi,
    initcolor='none'  ## Remove the line marking the valinit position.
)

Criar a Função de Atualização

Nesta etapa, você criará a função de atualização para os sliders. Esta função atualizará o gráfico quando os valores dos sliders forem alterados.

def update(val):
    amp = samp.val
    freq = sfreq.val
    l.set_ydata(amp*np.sin(2*np.pi*freq*t))
    fig.canvas.draw_idle()

Conectar os Sliders à Função de Atualização

Nesta etapa, você conectará os sliders à função de atualização. Isso garantirá que o gráfico seja atualizado sempre que os valores dos sliders forem alterados.

sfreq.on_changed(update)
samp.on_changed(update)

Criar o Botão de Reset

Nesta etapa, você criará um botão de reset para os sliders. Quando clicado, o botão de reset redefinirá os valores dos sliders para seus valores iniciais.

ax_reset = fig.add_axes([0.8, 0.025, 0.1, 0.04])
button = Button(ax_reset, 'Reset', hovercolor='0.975')

def reset(event):
    sfreq.reset()
    samp.reset()
button.on_clicked(reset)

Mostrar o Gráfico

Nesta etapa, você mostrará o gráfico.

plt.show()

Resumo

Neste laboratório, você aprendeu como usar Matplotlib para criar sliders com valores discretos. Você aprendeu como restringir os valores de um slider a um conjunto de valores permitidos e ajustar os valores do slider a esses valores permitidos. Você também aprendeu como criar um botão de reset para os sliders.