将变量传递给 Ipython 小部件

Pass variable to Ipython Widget

我有一个修改绘图的简单小部件,这里是定义:

#Plot function
def plf(x,lm,ls):
    plt.plot(x[lm:ls],np.sin(x)[lm:ls])

此函数采用列表 x 绘图 sin(x)lmls 控制绘制的数据数量,问题是当我尝试绘制确定的数据列表,例如

list = [1,2,3,4,5,6,7,8,9]

如果我尝试

interact(plf,x=list,lm=(0,max(x)//2,1),ls=(max(x)//2,max(x),1))

抛出错误:

NameError: name 'x' is not defined

那么,我如何定义 x 以便它可以是我想要的任何列表?

这是你想要做的吗?

%matplotlib inline
from IPython.html.widgets import interact, fixed
import matplotlib.pyplot as plt
import numpy as np

def plf(x,lm,ls):
    plt.plot(x[lm:ls],np.sin(x)[lm:ls])

data = [1,2,3,4,5,6,7,8,9]
max_lm = max(data)//2
max_ls = max(data)

interact(plf,x=fixed(data),lm=(0,max_lm,1),ls=(max_lm, max_ls,1))