Matplotlib-Schieberegler mit Snap-Funktion

Beginner

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

Einführung

In diesem Lab lernst du, wie du mit Matplotlib Schieberegler mit diskreten Werten erstellst. Du wirst lernen, wie du die Werte eines Schiebereglers auf eine Menge erlaubter Werte einschränkst und die Schiebereglerwerte auf diese erlaubten Werte snapst.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicke in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal musst du einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn du bei der Lernphase Probleme hast, kannst du Labby gerne fragen. Gib nach der Sitzung Feedback, und wir werden das Problem für dich prompt beheben.

Importiere erforderliche Bibliotheken

In diesem Schritt importierst du die erforderlichen Bibliotheken für dieses Lab. Du wirst Matplotlib verwenden, um die Schieberegler zu erstellen, und NumPy, um die Daten zu generieren, die geplottet werden sollen.

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.widgets import Button, Slider

Generiere Daten

In diesem Schritt wirst du die Daten generieren, die geplottet werden sollen. Du wirst eine Sinuswelle mit einer Frequenz von 3 Hz und einer Amplitude von 5 erstellen.

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

Erzeuge die Figur und die Achsen

In diesem Schritt wirst du die Figur und die Achsen für das Diagramm erstellen. Du wirst auch die Position der Achsen anpassen, um Platz für die Schieberegler zu schaffen.

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

Definiere erlaubte Werte für den Amplitude-Schieberegler

In diesem Schritt wirst du die erlaubten Werte für den Amplitude-Schieberegler definieren. Der Amplitude-Schieberegler wird diese Werte verwenden, um auf den nächstgelegenen erlaubten Wert zu springen.

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

Erstelle die Schieberegler

In diesem Schritt wirst du die Schieberegler erstellen. Du wirst einen Schieberegler für die Amplitude und einen Schieberegler für die Frequenz erstellen.

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'  ## Entferne die Linie, die die valinit-Position markiert.
)

Erstelle die Aktualisierungsfunktion

In diesem Schritt wirst du die Aktualisierungsfunktion für die Schieberegler erstellen. Diese Funktion wird das Diagramm aktualisieren, wenn die Werte der Schieberegler geändert werden.

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

Verbinde die Schieberegler mit der Aktualisierungsfunktion

In diesem Schritt wirst du die Schieberegler mit der Aktualisierungsfunktion verbinden. Dadurch wird sichergestellt, dass das Diagramm aktualisiert wird, wenn die Werte der Schieberegler geändert werden.

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

Erstelle die Zurücksetz-Schaltfläche

In diesem Schritt wirst du eine Zurücksetz-Schaltfläche für die Schieberegler erstellen. Wenn die Schaltfläche betätigt wird, wird sie die Werte der Schieberegler auf ihre Anfangswerte zurücksetzen.

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)

Zeige das Diagramm an

In diesem Schritt wirst du das Diagramm anzeigen.

plt.show()

Zusammenfassung

In diesem Lab hast du gelernt, wie du mit Matplotlib Schieberegler mit diskreten Werten erstellst. Du hast gelernt, wie du die Werte eines Schiebereglers auf eine Menge erlaubter Werte einschränkst und die Schiebereglerwerte auf diese erlaubten Werte snapst. Du hast auch gelernt, wie du eine Zurücksetz-Schaltfläche für die Schieberegler erstellst.