我正在尝试在类中使用面板小部件来更改绘图。下面的示例输出一次绘图,但是当我从小部件中选择不同的变量时,它不会更新绘图。
import pandas as pd
import param
import holoviews as hv
hv.extension('bokeh')
import panel as pn
pn.extension()
df = pd.DataFrame({'index':[1,2,3,4,5],
'signal1':[1,2,3,4,5],
'signal2':[5,4,3,2,1]}).set_index('index')
class Plot(param.Parameterized):
def __init__(self, df):
self.multi_select = pn.widgets.MultiSelect(name='Vars', value=['signal1'],
options=['signal1', 'signal2'])
self.df = df
self.watcher = self.multi_select.param.watch(self.dashboard, 'value')
super().__init__()
def dashboard(self, *events, **kwargs):
self.plt = hv.Curve(self.df, [self.df.index.name, self.multi_select.value[0]])
return self.plt
a = Plot(df)
pn.Row(a.multi_select,a.dashboard)
但是,如果我使用参数而不是面板小部件,它会按预期工作。
class Plot2(param.Parameterized):
multi_select = param.ListSelector(default=['signal1'],
objects=['signal1', 'signal2'])
df = df
def dashboard(self, **kwargs):
self.plt = hv.Curve(self.df, [self.df.index.name, self.multi_select[0]])
return self.plt
b = Plot2()
pn.Row(b.param,b.dashboard)
我做错了什么还是根本不可能?谢谢