我创建了以下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)
答案 0 :(得分:0)
您的函数正在滑块移动的每个值上运行,这可能会使您看到的运行时间较长。您可以通过将continuous_update=False
添加到您的FloatSlider
调用中来更改此设置(第32行)。
sl=widgets.FloatSlider(description=title,
min=-2.0,
max=2.0,
step=0.1,
orientation=o,
continuous_update=False)
这使我获得了更好的性能,并且图表没有闪烁,因为重绘的数量少得多。这有帮助吗?