努力使小部件在python中工作

时间:2020-10-19 13:17:05

标签: python matplotlib widget matplotlib-widget

我不知道为什么,但是我真的很努力地让小部件在python中正常工作。我尝试查看有关如何使用它们的示例,但我不知道如何推断该示例以使其与我的代码一起使用。我试图得到一个图来显示小部件,以便类型,频率,相位和其他变量调整图形本身。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.widgets as widgets
from scipy import signal
from matplotlib.widgets import RadioButtons

A = 1
ang_f = 5
t = np.linspace(0, 4*np.pi, 1000)
phase = 0

s0 = A*np.sin(ang_f*t + phase)
s2 = A*signal.sawtooth(ang_f*t + phase)
s1 = A*signal.square(ang_f*t + phase)

fig, ax = plt.subplots()
l, = ax.plot(t, s1, lw=2, color='red')
plt.subplots_adjust(left=0.4)


def sinf(x, omega):
    return np.sin(omega*x)


def sliderCallback(val):
    #  """ 'val' is the current value selected by the slider
    #    Recalculate sine values with val as the frequency """
    axesHandle.set_ydata(sinf(x, val))
    plt.draw()  # Redraw the axes


def clickcallback(val):
    #   'val' is the current value selected by the slider
    #    Recalculate sine values with val as the frequency
    axesHandle.set_ydata(sinf(x, val))
    plt.draw()  # Redraw the axes


def closeCallback(event):
    plt.close('all')  # Close all open figure windows


fig = plt.figure(figsize=(7, 5))
ax = plt.axes([0.1, 0.2, 0.6, 0.7])

axesHandle, = plt.plot(x, sinf(x, 1), lw=2, color='red')

# Add axis to contain the slider
fax = plt.axes([0.1, 0.04, 0.35, 0.03])    # Frequency
tax = plt.axes([0.1, 0.12, 0.35, 0.03])    # Time
sax_3 = plt.axes([0.60, 0.1, 0.35, 0.03])  # Number of points
pax = plt.axes([0.60, 0.05, 0.35, 0.03])    # Phase
rax = plt.axes([0.85, 0.65, 0.12, 0.15])    # Type
bax = plt.axes([0.85, 0.85, 0.1, 0.1])    # Close

pointshandle = widgets.Slider(sax_3, 'Number of points', 1, 200,
                              valfmt='%0.0f')
pointshandle.on_changed(sliderCallback)

graphchoice = widgets.RadioButtons(rax, ('Sine', 'Squarewave', 'Sawtooth'))
graphchoice.on_clicked(clickcallback)

freqhandle = widgets.Slider(fax, 'Frequancy (Hz)', 0, 5, valinit=1)
freqhandle.on_changed(sliderCallback)

phasehandle = widgets.Slider(pax, 'Phase', 0, 0*np.pi, valinit=0)
phasehandle.on_changed(sliderCallback)

timehandle = widgets.Slider(tax, 'Time (s)', 1, 10, valinit=1)
timehandle.on_changed(sliderCallback)

buttonHandle = widgets.Button(bax, 'Close')
buttonHandle.on_clicked(closeCallback)


def hzfunc(label):
    hzdict = {'Sine': s0, 'Squarewave': s1, 'Sawtooth': s2}
    ydata = hzdict[label]
    l.set_ydata(ydata)
    plt.draw()


graphchoice.on_clicked(hzfunc)

我真的迷路了,因此,将我带入正确道路的任何提示都将不胜感激,因为atm如此混乱。

0 个答案:

没有答案