Я строю информационную панель для построения частей набора данных, и она работает, когда я объявляю каждый отдельный компонент.Поскольку все мои графики похожи, только заголовок и ключ для выбора набора данных для построения графика - это только изменения, я попытался использовать класс для описания своих графиков, но у меня возникают проблемы при передаче значения виджета во все экземпляры класса plot.,
Я приложил пример ниже.В отдельной модели я получаю один виджет и два графика, и когда я меняю виджет с «a» на «b», оба графика обновляются, как и ожидалось.Однако в модели, использующей классы, когда я изменяю значение виджета, первый график обновляется, а второй - нет.Я предполагаю, что это потому, что виджет изменяет только key_val первого экземпляра, а не второго.
import pandas as pd
import panel as pn
import matplotlib.pyplot as plt
import param
pn.extension()
##separate model
data={'a':{'Set1':[[1,2],[10,20]],'Set2':[[3,4],[13,14]]},
'b':{'Set1':[[5,5],[6,16]],'Set2':[[10,20],[1,2]]}}
key_val = pn.widgets.Select(name='Choose dataset', options=['a','b'])
@pn.depends(key_val.param.value,watch=True)
def f1(key_val):
fig=plt.plot(data[key_val]['Set1'][0],data[key_val]['Set1'][1])
curr_fig=plt.gcf()
plt.close(curr_fig)
return curr_fig
@pn.depends(key_val.param.value,watch=True)
def f2(key_val):
fig=plt.plot(data[key_val]['Set2'][0],data[key_val]['Set2'][1])
curr_fig=plt.gcf()
plt.close(curr_fig)
return curr_fig
pn.Column(pn.WidgetBox(key_val), pn.Row(f1,f2))
##class model
class simple_plot(param.Parameterized):
key_val = param.Selector(default='a', objects=['a','b'])
my_second_option=param.String(default='Set1')
@param.depends('key_val',watch=True)
def f_both(self):
fig=plt.plot(data[self.key_val][self.my_second_option][0],
data[self.key_val][self.my_second_option][1])
curr_fig=plt.gcf()
plt.close(curr_fig)
return curr_fig
test=simple_plot()
test2=simple_plot(my_second_option='Set2')
pn.Row(test.param, pn.Row(test.f_both),pn.Row(test2.f_both))
Так что мой вопрос заключается в том, как настроить класс и виджет, чтобы я мог передать значение виджета для обоихэкземпляры моего класса?