亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用兩個同步的選擇小部件過濾表格

使用兩個同步的選擇小部件過濾表格

米脂 2022-12-06 16:30:57
我想使用兩個散景選擇小部件來過濾表格,請參閱下面的代碼結構。我定義了兩個小部件,userm 和 locations。首先,選擇帶有 userm 小部件的用戶(應該更改表格和“位置”小部件),其次,選擇帶有位置小部件的位置(應該再次更改表格)。我的代碼可以很好地根據用戶過濾表格,但不會根據位置選擇更新位置小部件和表格。我不確定是否可以在同一個回調函數中實現所有功能。有任何想法嗎?謝謝!#Import librariesfrom bokeh.io import output_notebook, showfrom bokeh.layouts import widgetboxfrom bokeh.models.widgets import Select, DataTable, TableColumnfrom bokeh.models.sources import ColumnDataSource, CDSViewfrom bokeh.models import CustomJS, Selectimport pandas as pdoutput_notebook()#Create the dataframedf = pd.DataFrame({'Index': ['9', '10', '11', '12', '13'],        'Size': ['250', '150', '283', '433', '183'],        'X': ['751', '673', '542', '762', '624'],        'Y': ['458', '316', '287', '303', '297'],        'User': ['u1', 'u1', 'u2', 'u2', 'u2'],        'Location': ['A', 'B', 'C', 'C', 'D']        })#Create widgetsuserm = Select(title = "Select user:", options=list(set(df['User'])),                value=list(set(df['User']))[0])locations = Select(title="Select location:", options=list(set(df['Location'])),                    value=list(set(df['Location']))[0])#Create data sourcesource=ColumnDataSource(data=dict(User=df['User'], Location=df['Location']))filteredSource = ColumnDataSource(data=dict(User=[],Location=[]))#Create data tablecolumns = [TableColumn(field="User",title="User"),           TableColumn(field="Location",title="Location",sortable=True)]data_table=DataTable(source=filteredSource,columns=columns, width=400 )data_table_unfiltered=DataTable(source=source,columns=columns, width=400 )callback = CustomJS(args=dict(source=source,                              filteredSource=filteredSource,                              data_table=data_table), code="""    var data = source.data;    var f = cb_obj.value;    var df2 = filteredSource.data;    df2['User']=[]    df2['Location']=[]    locations=[]
查看完整描述

1 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

可以在小部件之間共享單個CustomJS回調,但您不能使用cb_obj。您必須顯式傳遞小部件。


callback = CustomJS(args=dict(source=source,

                              filteredSource=filteredSource,

                              userm=userm, locations=locations),

                    code="""

    const data = source.data;

    const userm_value = userm.value;

    const locations_value = locations.value;

    const df2 = filteredSource.data;

    df2['User'] = [];

    df2['Location'] = [];


    for (let i = 0; i < data['User'].length; i++) {

        if (data['User'][i] === userm_value && data['Location'][i] === locations_value) {

            df2['User'].push(data['User'][i])

            df2['Location'].push(data['Location'][i])

        }

    }


    filteredSource.change.emit()

""")


userm.js_on_change('value', callback)

locations.js_on_change('value', callback)


查看完整回答
反對 回復 2022-12-06
  • 1 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號