Python面板传递数据帧到参数化

2024-06-10 12:52:59 发布

您现在位置:Python中文网/ 问答频道 /正文

Python面板传入数据帧参数化班级

我可以建立一个仪表板使用面板。我知道你想在一个包含数据操作的类中包含代码。你知道吗

    df = ydata.load_web(rebase=True)
    class Plot(param.Parameterized):
        df = df
        col = list(df.columns)
        Index1 = param.ListSelector(default=col, objects=col)
        Index2 = param.ListSelector(default=col[1:2], objects=col)

        def dashboard(self, **kwargs):
            unds = list(set(self.Index1 + self.Index2))
            return self.df[unds].hvplot()

    b = Plot(name="Index Selector")
    pn.Row(b.param, b.dashboard)

我想打电话

   b =  Plot(name="Index Selector", df=ydata.load_web(rebase=True))

Tags: 数据selfwebtrue面板dfparamplot
1条回答
网友
1楼 · 发布于 2024-06-10 12:52:59

使用参数化数据帧和两种方法

  • 根据数据框中的可用列设置ListSelector
  • 使用创建绘图高压叠加(包含每个选定列的单个绘图)

代码可以如下所示:

# Test data frame with two columns
df = pd.DataFrame(np.random.randint(90,100,size=(100, 1)), columns=['1'])
df['2'] = np.random.randint(70,80,size=(100, 1))

class Plot(param.Parameterized):
    df = param.DataFrame(precedence=-1) # precedence <1, will not be shown as widget
    df_columns = param.ListSelector(default=[], objects=[], label='DataFrame columns')

    def __init__(self, **params):
        super(Plot, self).__init__(**params)

        # set the column selector with the data frame provided at initialization
        self.set_df_columns_selector() 

    # method is triggered each time the data frame changes
    @param.depends('df', watch=True)
    def set_df_columns_selector(self):
        col = list(self.df.columns)
        print('Set the df index selector when the column list changes: {}'.format(col))
        self.param.df_columns.objects = list(col) # set choosable columns according current df
        self.df_columns = [self.param.df_columns.objects[0]] # set column 1 as default

    # method is triggered each time the choosen columns change
    @param.depends('df_columns', watch=True)
    def set_plots(self):
        print('Plot the columns choosen by the df column selector: {}'.format(self.df_columns))
        plotlist = [] # start with empty list
        for i in self.df_columns:
            # append plot for each choosen column
            plotlist.append(hv.Curve({'x': self.df.index, 'y':self.df[i]}))
        self.plot = hv.Overlay(plotlist)

    def dashboard(self):
        return self.plot

b = Plot(name="Plot", df=df)

layout = pn.Row(b.param, b.dashboard)
layout.app()
#or:
#pn.Row(b.param, b.dashboard)

这样,参数化变量负责更新绘图。你知道吗

相关问题 更多 >