我最近通过遵循本教程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]
至的范围内创建linspace对象>
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 ]
感谢您的帮助