使用多个滑块在单个图形中操作曲线



我创建了以下Jupyter Notebook。在这里,使用三个滑块移动三个功能。将来我想将其推广到任意数量的曲线(即n曲线(。但是,现在,图形更新过程非常慢,并且图形本身似乎没有固定在相关单元格中。我没有收到任何错误消息,但我很确定更新功能有错误。 这是代码

from ipywidgets import interact
import ipywidgets as widgets
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.display import display

x = np.linspace(0, 2*np.pi, 2000)
y1=np.exp(0.3*x)*np.sin(5*x)
y2=5*np.exp(-x**2)*np.sin(20*x)
y3=np.sin(2*x)
m=[y1,y2,y3]
num_curve=3

def shift(v_X):
v_T=v_X
vector=np.transpose(m)
print(' ')
print(v_T)
print(' ')
curve=vector+v_T
return curve
controls=[]
o='vertical'
for i in range(num_curve):
title="x%i" % (i%num_curve+1)
sl=widgets.FloatSlider(description=title,min=-2.0, max=2.0, step=0.1,orientation=o)
controls.append(sl)
Dict = {} 
for c in controls:
Dict[c.description] = c  
uif = widgets.HBox(tuple(controls))

def update_N(**xvalor):
xvalor=[]
for i in range(num_curve):
xvalor.append(controls[i].value)
curve=shift(xvalor)
new_curve=pd.DataFrame(curve)
new_curve.plot()
plt.show()
outf = widgets.interactive_output(update_N,Dict)
display(uif, outf)

您的函数正在滑块移动的每个值上运行,这可能会给您长时间运行您所看到的时间。您可以通过在FloatSlider呼叫中添加continuous_update=False来更改此设置(第 32 行(。

sl=widgets.FloatSlider(description=title,
min=-2.0, 
max=2.0, 
step=0.1,
orientation=o, 
continuous_update=False)

这让我的表现好多了,而且图表不会闪烁得那么多,因为重绘次数要少得多。这有帮助吗?

相关内容

最新更新