在交互模式下使用FloatRangeSlider小部件

时间:2019-08-08 14:13:07

标签: python jupyter-notebook ipywidgets

我最近通过遵循本教程https://www.youtube.com/watch?v=SN0Bflf14C4&t=937s&pbjreload=10尝试了ipywidgets的某些功能。在本教程中,他展示了如何使用交互来交互地更新正弦函数图。

我只是想知道我是否可以在交互模式下使用FloatRangeSlider动态更改x轴输入范围。这是我尝试过的脚本

amp = widgets.FloatSlider(min=1,max=10,value=1,description="Amp")
phase = widgets.FloatSlider(min=0,max=5,value=0,description="Phase")
freq = widgets.FloatSlider(min=1,max=10,value=0,description="Freq")
x = widgets.FloatRangeSlider(min=0,max=1)

f,ax = plt.subplots(1,figsize=(7,4))
ax.set_ylim([-10,10])
plt.suptitle("Sine Wave")

def update_plot(x,amp,phase,freq):

    ax.clear()
    y = amp*np.sin(2*np.pi*(freq*x+phase))
    ax.plot(x,y)
    ax.set_ylim([-10,10])
    ax.set_xlim([0,1])
    ax.grid()
    plt.show()

widgets.interactive(update_plot,x=x,amp=amp,phase=phase,freq=freq)

我想基于floatrangeslider控制曲线的范围,但是显然该小部件返回了元组,并且我试图将元组解包并在FloatRangeSlider.value[0]

FloatRangeSlider.value[1],但出现错误消息

def update_plot(x,amp,phase,freq):
---> 13     x1 = x.value[0]
     14     x2 = x.value[1]
     15     xt = np.linspace(x1,x2,50)
            ax.clear()
            y = amp*np.sin(2*np.pi*(freq*xt+phase))
            ax.plot(x,y)
            ax.set_ylim([-10,10])
            ax.set_xlim([0,1])
            ax.grid()
            plt.show()

AttributeError: 'tuple' object has no attribute 'value'

但是当我在其他单元格中尝试过它时,我仍然可以从FloatRangeSlider中打开元组

x = widgets.FloatRangeSlider(min=0,max=1)
x1=(x.value[0])
x2=(x.value[1])
xt = np.linspace(x1,x2,100)
print(x1,x2,xt)

0.25 0.75 [0.25       0.25505051 ...0.75      ]

感谢您的帮助

0 个答案:

没有答案