Слайдеры с фиксацией значений в Matplotlib

Beginner

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

Введение

В этом практическом занятии (лабораторной работе) вы научитесь использовать библиотеку Matplotlib для создания ползунков с дискретными значениями. Вы узнаете, как ограничить значения ползунка набором допустимых значений и сделать так, чтобы значения ползунка "прилипали" к этим допустимым значениям.

Советы по виртуальной машине (VM)

После запуска виртуальной машины нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если у вас возникнут проблемы во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импорт необходимых библиотек

На этом этапе вы импортируете необходимые библиотеки для этого практического занятия (лабораторной работы). Вы будете использовать библиотеку Matplotlib для создания ползунков и библиотеку NumPy для генерации данных, которые будут отображены на графике.

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.widgets import Button, Slider

Генерация данных

На этом этапе вы сгенерируете данные, которые будут отображены на графике. Вы создадите синусоидальную волну с частотой 3 Гц и амплитудой 5.

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

Создание фигуры и осей

На этом этапе вы создадите фигуру и оси для графика. Вы также будете настраивать положение осей, чтобы освободить место для ползунков.

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])

Определение допустимых значений для ползунка амплитуды

На этом этапе вы определите допустимые значения для ползунка амплитуды. Ползунок амплитуды будет использовать эти значения, чтобы "прилипать" к ближайшему допустимому значению.

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

Создание ползунков

На этом этапе вы создадите ползунки. Вы создадите один ползунок для амплитуды и один ползунок для частоты.

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

Создание функции обновления

На этом этапе вы создадите функцию обновления для ползунков. Эта функция будет обновлять график при изменении значений ползунков.

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

Подключение ползунков к функции обновления

На этом этапе вы подключите ползунки к функции обновления. Это обеспечит обновление графика при любом изменении значений ползунков.

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

Создание кнопки сброса

На этом этапе вы создадите кнопку сброса для ползунков. При нажатии кнопки сброса значения ползунков будут возвращены к их начальным значениям.

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)

Отображение графика

На этом этапе вы отобразите график.

plt.show()

Резюме

В этом практическом занятии (лабораторной работе) вы научились использовать библиотеку Matplotlib для создания ползунков с дискретными значениями. Вы узнали, как ограничить значения ползунка набором допустимых значений и сделать так, чтобы значения ползунка "прилипали" к этим допустимым значениям. Вы также научились создавать кнопку сброса для ползунков.