【发布时间】:2019-10-28 01:48:05
【问题描述】:
我必须制作一个独立的 html 仪表板,因此我试图弄清楚如何使用 CustomJS 向散景下拉小部件添加回调。问题是即使在查阅了有关该主题变体的其他帖子之后,我仍然无法弄清楚。任何帮助,将不胜感激!最终,我会使用下拉列表来过滤堆叠条形图,但我想在先过滤数据表之后自己尝试解决这个问题。
我咨询过Filtering dataframe using Bokeh/Widget/Callback、Bokeh datatable filtering inconsistency、Filtering dataframe using Bokeh/Widget/Callback 和Python bokeh CustomJS callback update DataTable widget。此外,我一直在阅读https://docs.bokeh.org/en/1.3.4/docs/user_guide/interaction/callbacks.html#userguide-interaction-jscallbacks 的文档,
import pandas as pd
from bokeh.models.widgets import Dropdown
from bokeh.layouts import widgetbox
from bokeh.models import ColumnDataSource, DataTable, TableColumn, CustomJS
from bokeh.io import show, output_file, output_notebook, reset_output
raw_data = {'ORG': ['APPLE', 'ORANGE', 'MELON'],
'APPROVED': [5, 10, 15],
'CREATED': [1, 3, 5],
'INPROCESS': [4,2,16]}
df = pd.DataFrame(raw_data)
# create list of orgs to use later
org_l = list(df['ORG'].unique())
# create CDS for source
src = ColumnDataSource(df)
# create cols
table_columns = [TableColumn(field = Ci, title = Ci) for Ci in df.columns]
# create filtered table
filtered_df = df.loc[df['ORG']=='f']
# create CDS for filtered source
new_src = ColumnDataSource(filtered_df)
# create dropdown
dropdown = Dropdown(label="Dropdown button", button_type="warning", menu = org_l)
callback_code = """"
var data = src.data;
var new_data = new_src.data;
var f = cb_obj.value;
var list = org_l;
if var i = org_list[i] {
new_src.data = src.data
}
"""
callback=CustomJS(args=dict(dropdown = dropdown,source=src),
code=callback_code)
# create table
member_table = DataTable(source = new_src, columns = table_columns)
dropdown.js_on_change('value', callback)
show(widgetbox(dropdown, member_table))
''''
【问题讨论】: