谢谢你举的例子。不幸的是,我不确定selectmultiple是否可以按您的意愿使用。
通常,对于交互调用,需要一个向其传递参数的函数。您不需要在函数体内部创建小部件,
interact
调用应该理解从传递的参数需要什么类型的输入小部件。
有关指定字符串选项列表的示例,请参见此处。(
https://ipywidgets.readthedocs.io/en/stable/examples/Using%20Interact.html#Widget-abbreviations
)
我对您的代码做了一些小的修改,以生成一个与下拉选择器交互的产品。我怀疑如果你想使用selectmultiple而不是下拉列表,这已经超出了
交互作用
功能。您可能需要单独创建小部件,然后使用
observe
.
# imports
%matplotlib inline
from ipywidgets import interactive
import pandas as pd
import numpy as np
# from jupyterthemes import jtplot
# Sample data
np.random.seed(123)
rows = 50
dfx = pd.DataFrame(np.random.randint(90,110,size=(rows, 1)), columns=['Variable X'])
dfy = pd.DataFrame(np.random.randint(25,68,size=(rows, 1)), columns=['Variable Y'])
dfz = pd.DataFrame(np.random.randint(60,70,size=(rows, 1)), columns=['Variable Z'])
df = pd.concat([dfx,dfy,dfz], axis = 1)
#jtplot.style()
import ipywidgets as widgets
from IPython.display import display
def multiplot(a):
opts = df.columns.values
df.loc[:, a].plot()
interactive_plot = interactive(multiplot, a=['Variable X', 'Variable Y', 'Variable Z'])
output = interactive_plot.children[-1]
output.layout.height = '350px'
interactive_plot
这里有一个版本使用
观察
,一个selectmultiple小部件和一个
Output
小装置:
# imports
%matplotlib inline
from ipywidgets import interactive
import pandas as pd
import numpy as np
from IPython.display import clear_output
import matplotlib.pyplot as plt
# Sample data
np.random.seed(123)
rows = 50
dfx = pd.DataFrame(np.random.randint(90,110,size=(rows, 1)), columns=['Variable X'])
dfy = pd.DataFrame(np.random.randint(25,68,size=(rows, 1)), columns=['Variable Y'])
dfz = pd.DataFrame(np.random.randint(60,70,size=(rows, 1)), columns=['Variable Z'])
df = pd.concat([dfx,dfy,dfz], axis = 1)
#jtplot.style()
import ipywidgets as widgets
from IPython.display import display
opts = df.columns.values
selector = widgets.SelectMultiple(
options=opts,
value=[opts[1]],
rows=len(opts),
description='Variables',
disabled=False)
output = widgets.Output()
display(selector)
display(output)
def multiplot(widg):
choices = widg['new']
data = df.loc[:, choices]
output.clear_output(wait=True)
with output:
ax = data.plot()
plt.show()
selector.observe(multiplot, names='value')