如何将单个小部件的值传递给Panel / Bokeh中一个对象的多个实例

len75

我构建了一个仪表板以绘制数据集的各个部分,并且在声明每个组件时都可以使用。由于所有图都相似,只有标题和选择要绘制的数据集的键是变化,所以我尝试使用一个类来描述我的图,但是我很难将小部件值传递给图类的所有实例。

我在下面附上一个例子。在单独的模型中,我得到一个小部件和两个图形,并且当将小部件从“ 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))

所以我的问题是如何设置类和窗口小部件,以便为类的两个实例传递窗口小部件值?

Y

您可以创建一个类CommonParameters来保存常用参数:

import pandas as pd  
import panel as pn  
import matplotlib.pyplot as plt  
import param    
pn.extension()  

data = {
    "a":{"Set1":([0, 1, 2], [1, 2, 3]),
         "Set2":([0, 1, 2], [1, 3, 2]),
        },
    "b":{"Set1":([0, 10, 20], [1, 20, 3]),
         "Set2":([0, 10, 20], [1, 3, 20]),
        },    
}

class CommonParameters(param.Parameterized):  
    key_val = param.Selector(default='a', objects=['a','b'])  

class simple_plot(param.Parameterized):      
    parameters = param.ObjectSelector(precedence=-1)
    my_second_option = param.String(default="Set1")

    @param.depends('parameters.key_val',watch=True)  
    def f_both(self):
        key_val = self.parameters.key_val
        fig=plt.plot(data[key_val][self.my_second_option][0],
        data[key_val][self.my_second_option][1])  
        curr_fig=plt.gcf()  
        plt.close(curr_fig)  
        return curr_fig  

common_pars = CommonParameters()
test=simple_plot(name="test1", parameters=common_pars)  
test2=simple_plot(name="test2", parameters=common_pars, my_second_option="Set2")  
pn.Row(pn.Column(common_pars.param, test.param, test2.param), pn.Row(test.f_both),pn.Row(test2.f_both))

如果您不需要进行编辑my_second_option,则可以使用:

pn.Row(common_pars.param, pn.Row(test.f_both), pn.Row(test2.f_both))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将小部件构造函数作为参数传递给另一个小部件来构建

如何将数据传递给另一个小部件内的小部件

将值传递给上一个小部件

如何将变量作为参数传递给小部件二,在那里修改它,并将修改后的值返回给小部件一,Flutter

如何运行多个实例.java文件(将其中一个作为对象或方法运行)

如何将数据从一个小部件传递到其同级小部件?

如何将 dart/flutter 中具有唯一键和数组值(对象)的地图传递给小部件?或者如何打印?

将一个小部件的值(年龄)传递给另一个小部件

如何将上下文传递给另一个小部件?

如何检查一个对象是否是多个模板参数的模板类的实例,并且其中一个参数满足某些条件?

tkinter-将条目小部件值传递给另一个类

将特定服务实例注入一个父组件中一个组件的多个实例中

如何在每个请求中一个接一个地存储多个对象?

如何使用 ngFor 访问 HTML 文件中一个大对象内的多个对象的值?

如何运行一个对象的多个实例

我如何将多个值传递给 spark scala 中的单个参数

如何将多个变量传递给单个视图 Laravel?

如何将一个输入的值传递给多个输入?

如何将多个值传递给一个参数

在Python中一次将多个属性分配给一个对象

在 Flutter 中如何将值传递给小部件

如何将值传递给对象表从一个表到另一个?

如何将多个按钮链接到 tkinter 中的一个文本小部件?

GTK 3如何将一个信号连接到多个小部件?

如何将搜索结果传递给会话。结果可能是一个对象或多个对象

根据一个对象中一个值对一个对象进行排序

如何使一个滑块/小部件更新Bokeh / Python / Pywidget中的多个图?

g:如何将模型实例传递到小部件并在模板中访问它

如何将一个函数的值传递给另一个函数?